目录
一、pytest默认的测试用例规则
二、pytest详细介绍
三、pytest的运行方式
四、改变pytest用例执行顺序
五、pytest还有一些前后置功能
六、接口关联(需要把所有的全局变量都集中管理)
七、生成漂亮的allure报告
八、解决一个接口只有一个用例的问题?(数据驱动)
九、90%企业都是通过Yaml来管理接口自动化测试的用例
一、pytest默认的测试用例规则
1.模块名必须以test_开头或_test结尾
2.测试类必须以Test开头
3.测试方式必须test_开头
1.发现测试用例:从多个py文件里面找到我们的测试用例
2.执行测试用例:按一定的顺序执行,并且生成报告
3.判断测试结果,断言
4.生成测试报告:allure报告
python:pytest,unittest
java:junit,testng
二、pytest详细介绍
1.pytest是一个成熟的python单元测试框架
2.它能够和自动化测试工具,selenium,requests,applum结合实现自动化
3.skip跳过用例,reruns失败用例重跑,多线程。
4.pytest和allure生成美观的测试报告。
5.它结合jenkins实现持续集成。
6.pytest有很多的插件
pytest 本身
pytest-html 生成html报告的插件
pytest-xdist 实现多线程
pytest-ordering 改变测试用例的执行顺序
pytest-rerunsfailures 失败用例重跑
allure-pytest 生成allure报告
三、pytest的运行方式
1.main()方式运行
if __name__=='__main__':
pytest.main(['-vs'])
2.命令行方式运行
pytest -vs
3.通过配置文件pytest.ini运行
不管你是main方式运行也好,还是命令行方式运行也好,都会自动的读取这个配置文件去执行
-vs -v打印详细信息,-s打印调试信息
-n -n表示多线程运行
--reruns 失败用例重跑(--reruns 2 用例失败后执行两次)
--html=路径 生成html的报告
-m 指定带标记的测试用例
四、改变pytest用例执行顺序
class TestMashang:
@pytest.mark.run(order=2)
def test_baili(self):
print("百里")
@pytest.mark.run(order=1)
def test_weiwei(self):
print("微微")
五、pytest还有一些前后置功能
每个用例之前和之后,以及每个类之前和之后
def setup(self):
print("在每个用例之前执行一次,如:打开浏览器,加载网页")
def teardown(self):
print("在每个测试用例之后执行一次,如:关闭浏览器")
def setup_class(self):
print("在每个类之前执行一次,创建日志对象,创建数据库连接")
def tear_down(self):
print("在每个类之后执行一次,关闭数据库连接,销毁日志对象")
如果有10000个用例,我希望的是在其中的三个用例里面需要做前后置
部分类前后置。使用fixture装饰器。
方法如下:
@pytest.fixture(scope="作用域",params="数据驱动",autouse="自动执行",ids="数据驱动时重命名参数名",name="给fixture作用的函数重命名")
1.scope参数 :
function 函数
class 类
module 模块
package/session 回话
部分类的前后置
@pytest.mark.usefixtures('execute_database_sql')
class TestAaa:
def test_aaa(self):
print("test_aaa")
会话的前后置,一般会结合conftest.py文件一起使用
1.conftest.py单独用于存放fixture固件的配置文件
2.在conftest.py中固件在使用时不需要导包。
3.可以有多个conftest.py文件
六、接口关联(需要把所有的全局变量都集中管理)
比较成熟的是:通过一个单独的yaml文件管理
接口自动化测试框架封装的第一步:接口关联封装
思想比脚本重要
七、生成漂亮的allure报告
1.官网下载allure
下载之后解压保存到E盘,并且需要把bin路径配置到path里面
2.验证allure安装是否成功
allure --version
3.生成allure报告
(1)生成临时的json格式的报告
(2)生成html报告
os.system("allure generate ./temps -o ./reports --clean ")
八、解决一个接口只有一个用例的问题?(数据驱动)
@pytest.mark.parameter(args_name,args_value)
args_name:参数名,字符串
args_value:参数值,(list,tuple,字典列表,字典元组),有多少个值那么测试用例就会执行多少次
第一种用法:
@pytest.mark.parameter("caseinfo",['百里','微微','晴天'])
def test_get_token(self,caseinfo):
print(caseinfo)
第二种用法:解包
@pytest.mark.parametrize("name,age",[['百里','13'],['依然','11']])
def test_get_token(self,name,age):
print(name,age)
九、90%企业都是通过Yaml来管理接口自动化测试的用例
yaml是一种数据格式,主要用于配置文件或编写用例
yaml只有两种数据
1.键值对:
access_token:value
2.list.用一组横线开头表示(-)
操作yaml所使用的第三方库不是yaml,而是pyyaml
一个py文件可以有多个接口
一般一个接口对应一个yaml文件,一个yaml文件里面就有几十个用例,有正例和反例。
class AllRequest:
session = requests.session()
def all_send_request(self,method,url,data,**kwargs):
method=str(method).lower()
res=None
if method =='get':
res=AllRequest.session.request(method=method,url=url,params=data,**kwargs)
elif method=='post':
strdata=json.dumps(data)
res=AllRequest.session.request(method=method,url=url,data=strdata,**kwargs)
else:
print("不支持的请求方式")
return res