2020-11-04 10:12发布
一、pytest 的优势
pytest是基于 unittest 之上的单元测试框架,它的优势如下:
自动发现测试模块和测试方法
默认从当前目录中搜集测试用例,即在那个目录下运行pytest 命令,则从那个目录当中搜索
搜索规则:进入目录后,在按照搜索规则搜索用例
符合命名规则 test_*.py 或者 *_test.py 的文件
以 test_ 开头的函数名
以 Test 开头的测试类(没有 _init_ 函数)当中,以 test_ 开头的函数
import pytestif __name__ == '__main__': pytest.main()
断言使用 assert + 表达式
可以设置测试会话级(session)、模块级(module)、类级(class)、函数级(function)的 fixture 来共享测试用例的前置和后置
有丰富的插件库,目前已经700+ ,pytest插件地址:http://plugincompat.herokuapp.com/
二、与unittest的对比
1.用例设计规划
unittest
测试类必须继承 unittest.TestCase
测试函数必须以 “test_” 开头
使用defaultTestLoader.descover()加载测试用例时,测试模块( py文件)名称要以test开头
pytest
测试模块文件的文件名必须以"test_ "开头或者以" _test"结尾
测试类命名必须以"Test"开头
测试函数名必须以"test"开头
测试类里面不能使用" _init_ "方法
2.断言对比
unittest断言
assertEqual(a, b) 判断a和b是否相等
assertNotEqual(a, b) 判断a不等于b
assertTrue(a) 判断a是否为Ture
assertFalse(a) 判断a是否为False
assertIn(a, b) a包含在b里面
asserNotIn(a, b) a不包含在b里面
pytest断言
assert + 表达式
3.用例前置和后置
unittest前置和后置
通过setup每个用例执行前执行,teardown每个用例执行后执行
通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行
pytest前置和后置
会话级别: session,整个测试执行会话全部用例开始前执行/全部用例执行完后执行
模块级别: module,只对模块级别生效,整个.py全部用例开始前执行/全部用例执行完后执行
类级别: class,只对类级别生效,整个测试类全部用例开始前执行/全部用例执行完后执行
函数级别: function,只对函数级别生效,每个用例开始前和结束后执行一次
4.参数化
unittest参数化
结合ddt模块,在类上面使用@ddt装饰,测试用例的方法上使用@data0来来实现数据驱动
pytest参数化
通过装饰器@pytest.mark.parametrize来实现数据驱动
5.生成报告方式
通过HTMLTestRunner生成
通过pytest-html生 成html格式报告
通过与allure集成生成优美的allure报告
自动化测试框架分类,根据功能平台来划分:
1. 基于前端的WebUI框架:Junit、TestNG、自定义框架,咱们主要以自定义框架来演示。
基于Selenium自动化测试工具前端的WebUI测试框架,主要使用关键字驱动与数据驱动来实现自动化测试。
有使用过unittest单元测试框架,再使用pytest单元测试框架,就可以明显感觉到pytest比unittest真的简洁、方便很多。
unittest与pytest的区别:
主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较unittest和pytest的区别
前后置的区别:
https://www.cnblogs.com/cuitang/p/11639961.html
参数化的区别:
unittest参数化:结合装饰器ddt来实现
1 测试类前要添加修饰器 @ddt.ddt @ddt.ddt 2 class TestLogin(unittest.TestCase): #测试用例前要添加修饰 @ddt.data,form_wrong_data包含了3条测试数据,此时要将这3条数据都拿出来,需要加上*3 @ddt.data(*lg.form_wrong_data)4 def test_login_2_form_wrongdata(self, data):5 # 步骤 登录页面 -》 登录功能-》输入用户名、密码 #测试数据 python 断言数据,请输入手机号6 self.lp.login(data["user"], data["pwd"])7 self.assertEqual(str(data["check"]), self.lp.get_wrong_msg())
pytest参数化:直接使用@pytest.mark.parametrize(自定义命令参数名称,数据源)
1 @pytest.mark.parametrize("sucess_data", ld.sucess_data)2 def test_1_sucess_login(self, sucess_data, start_app):3 MyLog().info("成功登录测试用例")4 bl(start_app).click_now_to_login()5 lp(start_app).Login(sucess_data["username"], sucess_data["password"])
可以设置测试会话级(session)、模块级(module)、类级(class)、函数级(function)的fixture来共享测试用例的前置和后置
有丰富的插件库,目前已经700+,pytest插件地址:http://plugincompat.herokuapp.com/
1、测试类必须继承unittest.TestCase
2、测试函数必须以"test_"开头
3、使用defaultTestLoader.descover()加载测试用例时,测试模块(py文件)名称要以test_开头
1、测试模块文件的文件名必须以"test_"开头或者以"_test"结尾
2、测试类命名必须以"Test"开头
3、测试函数名必须以"test"开头
4、测试类里面不能使用"__init__"方法
assertEqual(a, b) 判断 a 和 b 是否相等
assertNotEqual(a, b) 判断 a 不等于 b
assertTrue(a) 判断 a 是否为 Ture
assertFalse(a) 判断 a 是否为 False
assertIn(a, b) a 包含在 b 里面
asserNotIn(a, b) a 不包含在 b 里面
......
会话级别:session,整个测试执行会话全部用例开始前执行/全部用例执行完后执行
模块级别:module,只对模块级别生效,整个.py全部用例开始前执行/全部用例执行完后执行
类级别:class,只对类级别生效,整个测试类全部用例开始前执行/全部用例执行完后执行
函数级别:function,只对函数级别生效,每个用例开始前和结束后执行一次
结合ddt模块,在类上面使用@ddt装饰,测试用例的方法上使用@data()来来实现数据驱动
unittest:通过HTMLTestRunner生成
pytest:通过pytest-html生成html格式报告
最多设置5个标签!
一、pytest 的优势
pytest是基于 unittest 之上的单元测试框架,它的优势如下:
自动发现测试模块和测试方法
默认从当前目录中搜集测试用例,即在那个目录下运行pytest 命令,则从那个目录当中搜索
搜索规则:进入目录后,在按照搜索规则搜索用例
符合命名规则 test_*.py 或者 *_test.py 的文件
以 test_ 开头的函数名
以 Test 开头的测试类(没有 _init_ 函数)当中,以 test_ 开头的函数
断言使用 assert + 表达式
可以设置测试会话级(session)、模块级(module)、类级(class)、函数级(function)的 fixture 来共享测试用例的前置和后置
有丰富的插件库,目前已经700+ ,pytest插件地址:http://plugincompat.herokuapp.com/
二、与unittest的对比
1.用例设计规划
unittest
测试类必须继承 unittest.TestCase
测试函数必须以 “test_” 开头
使用defaultTestLoader.descover()加载测试用例时,测试模块( py文件)名称要以test开头
pytest
测试模块文件的文件名必须以"test_ "开头或者以" _test"结尾
测试类命名必须以"Test"开头
测试函数名必须以"test"开头
测试类里面不能使用" _init_ "方法
2.断言对比
unittest断言
assertEqual(a, b) 判断a和b是否相等
assertNotEqual(a, b) 判断a不等于b
assertTrue(a) 判断a是否为Ture
assertFalse(a) 判断a是否为False
assertIn(a, b) a包含在b里面
asserNotIn(a, b) a不包含在b里面
pytest断言
assert + 表达式
3.用例前置和后置
unittest前置和后置
通过setup每个用例执行前执行,teardown每个用例执行后执行
通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行
pytest前置和后置
会话级别: session,整个测试执行会话全部用例开始前执行/全部用例执行完后执行
模块级别: module,只对模块级别生效,整个.py全部用例开始前执行/全部用例执行完后执行
类级别: class,只对类级别生效,整个测试类全部用例开始前执行/全部用例执行完后执行
函数级别: function,只对函数级别生效,每个用例开始前和结束后执行一次
4.参数化
unittest参数化
结合ddt模块,在类上面使用@ddt装饰,测试用例的方法上使用@data0来来实现数据驱动
pytest参数化
通过装饰器@pytest.mark.parametrize来实现数据驱动
5.生成报告方式
unittest
通过HTMLTestRunner生成
pytest
通过pytest-html生 成html格式报告
通过与allure集成生成优美的allure报告
自动化测试框架分类,根据功能平台来划分:
1. 基于前端的WebUI框架:Junit、TestNG、自定义框架,咱们主要以自定义框架来演示。
基于Selenium自动化测试工具前端的WebUI测试框架,主要使用关键字驱动与数据驱动来实现自动化测试。
有使用过unittest单元测试框架,再使用pytest单元测试框架,就可以明显感觉到pytest比unittest真的简洁、方便很多。
unittest与pytest的区别:
主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比较unittest和pytest的区别
前后置的区别:
https://www.cnblogs.com/cuitang/p/11639961.html
参数化的区别:
unittest参数化:结合装饰器ddt来实现
1 测试类前要添加修饰器 @ddt.ddt
@ddt.ddt 2 class TestLogin(unittest.TestCase):
#测试用例前要添加修饰 @ddt.data,form_wrong_data包含了3条测试数据,此时要将这3条数据都拿出来,需要加上*3 @ddt.data(*lg.form_wrong_data)4 def test_login_2_form_wrongdata(self, data):5 # 步骤 登录页面 -》 登录功能-》输入用户名、密码 #测试数据 python 断言数据,请输入手机号6 self.lp.login(data["user"], data["pwd"])7 self.assertEqual(str(data["check"]), self.lp.get_wrong_msg())
pytest参数化:直接使用@pytest.mark.parametrize(自定义命令参数名称,数据源)
1 @pytest.mark.parametrize("sucess_data", ld.sucess_data)2 def test_1_sucess_login(self, sucess_data, start_app):3 MyLog().info("成功登录测试用例")4 bl(start_app).click_now_to_login()5 lp(start_app).Login(sucess_data["username"], sucess_data["password"])
一、pytest的优势
自动发现测试模块和测试方法
断言使用 assert + 表达式
可以设置测试会话级(session)、模块级(module)、类级(class)、函数级(function)的fixture来共享测试用例的前置和后置
有丰富的插件库,目前已经700+,pytest插件地址:http://plugincompat.herokuapp.com/
二、二者的区别
1.用例设计规则
unittest
1、测试类必须继承unittest.TestCase
2、测试函数必须以"test_"开头
3、使用defaultTestLoader.descover()加载测试用例时,测试模块(py文件)名称要以test_开头
pytest
1、测试模块文件的文件名必须以"test_"开头或者以"_test"结尾
2、测试类命名必须以"Test"开头
3、测试函数名必须以"test"开头
4、测试类里面不能使用"__init__"方法
2.断言对比
unittest断言
assertEqual(a, b) 判断 a 和 b 是否相等
assertNotEqual(a, b) 判断 a 不等于 b
assertTrue(a) 判断 a 是否为 Ture
assertFalse(a) 判断 a 是否为 False
assertIn(a, b) a 包含在 b 里面
asserNotIn(a, b) a 不包含在 b 里面
......
pytest断言
assert + 表达式
3.用例前置和后置
unittest前置和后置
通过setup每个用例执行前执行,teardown每个用例执行后执行
通过setupclass类里面所有用例执行前执行,teardownclass类里面所有用例执行后执行
pytest前置和后置
会话级别:session,整个测试执行会话全部用例开始前执行/全部用例执行完后执行
模块级别:module,只对模块级别生效,整个.py全部用例开始前执行/全部用例执行完后执行
类级别:class,只对类级别生效,整个测试类全部用例开始前执行/全部用例执行完后执行
函数级别:function,只对函数级别生效,每个用例开始前和结束后执行一次
4.参数化
unittest参数化
结合ddt模块,在类上面使用@ddt装饰,测试用例的方法上使用@data()来来实现数据驱动
pytest参数化
通过装饰器@pytest.mark.parametrize来实现数据驱动
5.生成报告方式
unittest:通过HTMLTestRunner生成
pytest:通过pytest-html生成html格式报告
通过与allure集成生成优美的allure报告
相关问题推荐