HOME AUTHORS

python+requests+pytest+Allure实现接口自动化

2022年3月22日 13:54 2022年3月23日 23:51 更新
ali
Tags pytest test url

requests库介绍

requests库是python的第三方库,可以模拟发送http请求

requests发送Get请求

运用requests.get(url,params=None,kwargs)函数发送get请求

入参说明

若r=requests.get("http://httpbin.org/get",params={'key1':'value1','key2':'value2'}) 那么,最终请求的目标URL为http://bin.org/get?key1=value1&key2=value2

例如:

auth={'username','password'} //接口安全测试中用到的用户认证

headers={'user-agent':'my-app/0.0.1'} //可定制发送请求头

调用get方法之后,得到的是一个reponse类对象,是requests模块models.py里的Response类

reponse类对象可以使用的方法

  1. json():可以得到返回的json数据对象。如果json 解码失败,就会抛出一个异常。例如:接口响应返回401,尝试访问r.jon()方法,会抛出 ValueError:No JSON object could be decoded 异常

  2. status_code: 得到响应状态码

  3. encoding:得到编码方式

  4. url:得到目标url

  5. headers:得到响应头

  6. text:得到text形式的响应内容

  7. content:得到二进制的响应内容

  8. raw: 原始响应内容

得到reponse对象之后,通过读取reponse的内容,比如json数据,再进行一系列的断言,从而验证接口返回的数据是否正确

requests发送Post请求

通过调用requests.post(url,data=None,kwards)函数发送post请求

入参说明

post请求也是会返回一个response类对象,可调用的方法和get方法的说明相同

然后做一系列的断言,验证接口返回的数据是否正确

定制请求头

data= {'key1': 'value1', 'key2': 'value2'}

headers = {'user-agent': 'my-app/0.0.1'}

r = requests.post("http://httpbin.org/post", data=data,headers=headers)

上传文件

url = 'http://httpbin.org/post'

files = {'file': open('1.txt', 'rb')}

r = requests.post(url, files=files)

发送cookies

url = 'http://httpbin.org/cookies'

cookies = dict(cookies_are='working')

r = requests.get(url, cookies=cookies)

发送Https请求

url='https://www.ctrip.com/'

r=requests.post(url=url,verify=False)#verify参数默认为True,值为False,表示忽略证书

r=requests.post(url=url,verify='证书的路径')

pytest框架

是一个python测试框架,可以覆盖unittest能做到的各种场景,比如单元测试、web测试、app测试、接口测试等

与unittest测试框架的区别:

  1. unittest框架是python内嵌的测试框架,原名为PyUnit。unittest提供了test cases、test suites、test fixtures、test runner相关的类,让测试更加明确、方便、可控。使用unittest编写用例,必须遵守以下规则:

           1. 测试文件必须先import unittest
    
           2. 测试类必须继承unittest.TestCase
    
           3. 测试方法必须以'test_'开头
    
           4. 测试类必须要有unittest.main()方法
    
  2. python是python的第三方测试框架,是基于unittest框架的扩展,比unittest更简洁、高效。使用pytest测试框架,必须遵守以下规则:

           1. 测试文件名必须以'test_'开头
    
           2. 测试方法必须以'test_'开头
    

pytest还可以执行unittest风格的测试用例,无需修改unittest用例的任何代码,有较好的兼容性。

pytest插件丰富,比如flask插件,可以用于用例出错重跑;还有xdist插件,可用于设备并行执行

Allure介绍

由Qameta Software团队开源的一款旨在于解决让每个人能更容易生成并更简洁阅读的测试报告框架。它支持大多数的测试框架,如:Pytest、TestNG等,简单易用便于集成。

与pytest结合使用,主要是将pytest的测试结果转为html数据

ps: 不使用Allure生成测试报告也可以。pytest自己也能生成html格式的测试报告

具体实现

待更新

参考1

参考2

读取测试数据文件(txt、csv格式)

在python中从txt等格式的测试数据文件,获取到具体的测试用例参数。python提供了获取excel数据的方法

运行测试用例的两种方法:

  1. 命令行模式

  2. 先进入测试用例所在的目录,使用pytest命令执行该目录下的所有测试用例文件

  3. 也可以指定执行某一个测试用例文件,直接在pytest后面加上需要执行的文件名即可,例如pytest test_example.py

  4. 执行”某文件下的类中所有用例方法“或者”某方法“,分别用命令”pytest 文件名::类名“和”pytest 文件名::类名::方法名“

  5. 在python文件中执行测试用例

     if __name__ == "__main__":
    
     #单个文件运行,运行添加,对应的文件路径,路径要用相对路径
    
     pytest.main(['../test_case//test_case_01.py'])
    
     #多个文件运行,运行添加多个对应的文件路径,列表的形式,去添加多个文件的路径
    
     pytest.main(['../test_case/test_fore.py','../test_case/Dynamic correlation_token.py'])
    
     #运行整个目录,添加目录的路径
    
     pytest.main(['../test_case/','--html=../report/report.html','--junitxml=../report/report.xml'])