全方面了解接口自动化

全方面了解接口自动化
一、自动化分类
 
(1)接口自动化
 
python/java+requests+unittest框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高
 
(2)Web UI功能自动化
 
python/java+selenium+unittest+ddt+PO框架来实现 python/java+RFS(RobotFrameWork+Selenium)框架来实现——对于编程要求不高
 
(3)App自动化
 
python/java+appnium+unittes框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高
 
二、接口自动化与Web自动化的区别
 
(1)接口自动化是没有界面的,不需要对界面元素定位操作,不需要考虑界面延迟的问题,执行效率更高
 
(2)接口自动化用的是requests测试库,Web自动化用的selenium测试库
 
(3)接口自动化的覆盖率可以达到100%(绝大部分的接口都可以实现自动化) Web自动化的覆盖率能达到80-90%算OK(可能会有某些功能是没办法实现自动化的)
 
三、怎么做接口自动化
 
3.1、流程
 
A. 确定业务范围,哪些业务功能的接口可以做自动化——接口自动化的覆盖率可以达到 100%
 
B. 时间进度安排,人员分配
 
C. 确定自动化测试框架
 
D. 准备数据——准备接口用例数据
 
E. 编写接口自动化脚本
 
3.2、搭建接口自动化测试环境
 
1、安装python3.x——配置python的环境变量
 
2、安装PyCharm——python开发工具
 
3、安装测试库:
 
Requests库—— 提供了丰富的用来发请求,对请求进行处理的API函数
 
xlrd,xlwt库—— 提供了对Excel文件进行操作的API函数
 
Pymysql库—— 提供了对Mysql数据库进行操作的API函数
 
paramsunittest库—— 实现参数化的库
 
Json库—— 提供了对Json格式的数据进行操作的API函数
 
(python自带的基础库) Re库—— 可以使用这个库中的API函数对HMTL数据进行操作
 
3.3、准备数据
 
准备接口用例数据 我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:
 
3.4、编写自动化测试脚本
 
1、步骤:
 
    A、导包
 
import requests
 
    B、组织请求参数
 
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
 
par = {   
 
         ‘email’: ‘Jason’,   
 
         ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,    
 
        ‘auto_login’: 0,   
 
        ‘ajax’: 1
 
}
 
    C、发送请求
 
res = requests.post(url, data=par)
 
res = requests.get(url,params=par)
 
    D、提取响应对象中的数据,并做断言
 
1、提取响应*body*内容**
 
     res.text     —— 如果返回的是html格式的数据,使用res.text提取——
 
     res.json()   —— 如果后台返回的是json格式的数据,则使用这个API函数来提取——
 
2、提取响应头***
 
     res.headers
 
3、提取状态码,响应信息
 
     res.status_code
 
     res.reason
 
4、提取cookie值
 
     res.cookies()
 
2、传递请求头
 
header = {
 
    ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0’,
 
    ‘Accept’: ‘application/xml’,
 
}
 
res = requests.post(url,data=par,headers=header)    
 
3、传递cookie,token值
 
    通过请求头来传递 —— 直接从浏览器上查看cookie值,并传递到后台。
 
header = {
 
    ‘Cookie’: ‘PHPSESSID=3724b412550a557825da5528dd6198c6’                  
 
}
 
res = requests.post(url,data=par,***headers=heade***r,allow_redirects=False) 
 
    发请求的时候通过cookies这个参数来传递
 
import requests
 
#1. 登录,获取cookie值
 
def getCookie():
 
    url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
 
    par = {
 
        ‘email’: ‘Jason’,
 
        ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
 
        ‘auto_login’: 0,
 
        ‘ajax’: 1
 
    }
 
    res = requests.post(url, data=par)
 
    return res.cookies
 
#2. 调用充值接口
 
#2.1 获取cookie值
 
cookie = getCookie()
 
#2.2 发充值请求
 
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
 
par = {
 
    ‘check_ol_bl_pay’:’on’,
 
    ‘money’:1000,
 
    ‘bank_id’:0,
 
    ‘memo’:234567890,
 
    ‘payment’:5,
 
}
 
#发充值请求
 
res1 = requests.post(url,data=par,cookies=cookie,allow_redirects=False)            # 自动重定向的,可以取消自动重定向
 
print(res1.status_code)
 
print(res1.reason)
 
print(res1.headers)
 
    先创建一个session对象,所有请求都使用这个session对象来发送
 
import requests
 
#1. 发登录请求
 
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
 
par = {
 
    ‘email’: ‘Jason’,
 
    ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
 
    ‘auto_login’: 0,
 
    ‘ajax’: 1
 
}
 
#创建一个seesion对象,后期使用这个session对象来发请求
 
ses = requests.session()
 
#发登录请求,返回的cookie值会自动化保存到session对象中
 
response1 = ses.post(url,data=par)
 
#2. 发充值请求
 
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
 
par = {
 
    ‘check_ol_bl_pay’:’on’,
 
    ‘money’:1000,
 
    ‘bank_id’:0,
 
    ‘memo’:234567890,
 
    ‘payment’:5,
 
}
 
response2 = ses.post(url,data=par,allow_redirects=False)
 
print(response2.headers)

推荐阅读