| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 2022年最新用最简单粗暴的方式讲解:pytest简介,框架基础应用,运行方式,失败用例重跑。直击核心 -> 正文阅读 |
|
[开发测试]2022年最新用最简单粗暴的方式讲解:pytest简介,框架基础应用,运行方式,失败用例重跑。直击核心 |
目录 【pytest简介】pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试、自动化测试工作中。 unittest也是python语言中一款单元测试框架,但是功能有限,没有pytest灵活。 就像:苹果电脑mac air?和mac pro一样。都是具备同样的功能,但是好用,和更好用。 ? 1)pytest写用例很简单,下面是一个简单的例子:1 import random 2 3 4 def test_demo(): 5 assert 7 == random.randint(0,10) 运行结果如下: ============================= test session starts ============================= platform win32 -- Python 3.7.2, pytest-4.6.3, py-1.8.0, pluggy-0.12.0 rootdir: D:\Pychram-Workspace\STUDY_PYTEST plugins: allure-pytest-2.6.5, html-1.21.1, metadata-1.8.0, rerunfailures-7.0collected 1 item simple.py F simple.py:10 (test_demo) 7 != 6 Expected :6 Actual :7 ========================== 1 failed in 0.14 seconds =========================== 2)pytest的安装? ???安装命令:pip install pytest 3)pytest的特征、与unittest的区别。
? ? ??pytest的特征如下: ? ? 3.1? 自动识别测试用例。(unittest当中,需要引入TestSuite,主动加载测试用例。) ? ? 3.2? 简单的断言表达:assert?表达式即可。(unittest当中,self.assert*) ? ? 3.3? 有测试会话、测试模块、测试类、测试函数级别的fixture。(unittest当中是测试类、测试函数级别的fixture) ? ? 3.4?有非常丰富的插件,目前在600+,比如allure插件。(unittest无) ? ? 3.5?测试用例不需要封装在测试类当中。(unittest中需要自定义类并继承TestCase) 那么pytest是如何自动识别测试用例的呢?我们在编写pytest用例的时候,需要遵守哪些规则呢? ? 4)? pytest如何自动识别用例? 识别规则如下:
? ? ??1、搜索根目录:默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索; ? ? 2、搜索规则: ? ? ? ? 1)搜索文件:符合命名规则 test_*.py 或者 *_test.py 的文件 ? ? ? ? 2)在满足1)的文件中识别用例的规则: ? ? ? ? ? ? ? 2.1)以test_开头的函数名; ? ? ? ? ? ? ? 2.2)以Test开头的测试类(没有__init__函数)当中,以test_开头的函数 ? 示例:在D:\pycharm_workspace目录下,创建一个python工程,名为study_pytest。在工程下,创建一个python包,包名为TestCases。 ? ? ? ? ? ? 在包当中,创建一个测试用例文件:test_sample_1.py。文件内容如下: 1 #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # Name: test_sample_1.py 4 # Author: 简 5 # Time: 2019/6/27 6 7 # 定义py文件下的测试用例 8 def test_sample(): 9 print("我是测试用例!") 10 11 class TestSample: 12 13 def test_ss(self): 14 print("我也是测试用例!") 15 16 def hello_pytest(self): 17 print("hi,pytest,我不是用例哦!!") 按照上面定义的搜索规则,需要跳转到工程目录,然后再执行命令:pytest -v 。 执行结果如下: 让我们愉快的加进来第2个测试文件:test_sample_2.py,内容如下: #!/usr/bin/python3 # -*- coding: utf-8 -*- # Name: test_sample_2 # Author: 简 # Time: 2019/6/27 def add(a,*args): sum = a for item in args: sum += item return sum def test_add_two_number(): assert 33 == add(11,22) assert 55.55 == add(22.22,33.33) def test_add_three_number(): assert 101 == add(10,90,1) ?再次运行命令:pytest -v? ?得到如下结果: 通过多个用例文件的执行,可以看出用例的执行顺序。 ???5)? pytest中用例的执行顺序? ?原则:先搜索到的py文件中的用例,先执行。在同一py文件当中,按照代码顺序,先搜索到的用例先执行。 【Pytest测试框架基础--常用功能介绍】本节主要系统介绍一下Pytest在自动化测试中常用的一些用法,自己编写了一个自动化测试脚本,附在末尾 一、断言学过unittest的同学知道,也是有断言方法的,但是pytest与其有点不同,更为简单。 判断a是否与b相等? assert a==b 判断a是否存在b中 assert a in b 判断a与b不相等 assert a != b 二、指定顺序执行用例测试用例的执行顺序是按照字母顺序执行的,如果想指定其执行顺序,可以使用order用法。 首先需要安装pytest-ordering库,然后在测试用例上面调用pytest.mark.run(order=1),数字字母越小越先执行。 @pytest.mark.run(order=1) def test_login_account_ok(self): self.driver.send_account('account') 三、参数化? 在编写测试用例时候,只有某一个值进行改变,可以将此值进行参数化,有多少个值执行多少次。
备注:以上测试用例会执行4次,每次百度输入框输入的值分别为selenium,自动化,123,空;测试用例的参数必须要与parameterize里面的参数一致 如果是需要传入多个参数,比如登录的用户名,密码 可以写为:
四、不执行某个测试用例如果想要某个测试用例不执行,可以加上@pytest.mark.skip,这样某个测试用例就会跳过执行。 五、测试用例前后执行
def teardown(def): 每执行一个测试用例,就会执行一次setup,teardown.比如有3个测试用例,那么对应的setup,teardown也会执行三遍。 【pytest基本运行方式】1、主函数模式 1、运行所有:pytest.main() 2、指定模块:pytest.main(['-vs','xxxx.py']) 3、指定目录:pytest.main(['-vs','./文件名称']) 4、pytest支持单个函数写法:pytest.main(['-vs','./文件名/py文件名::类名::方法名']) 5、 重点:pytest.ini配置文件,1、存在位置,项目的根目录 2、编码格式:ANSI,可以使用notepad++修改编码格式 3、作用:改变pytest默认的行为 4、运行规则:不管是主函数模式,或者命令行模式运行,都会去读取整个配置文件 参数详解:-s 表示输出调试信息,包括print打印的消息 -v 表示输出函数名信息,可与-s合用,-vs -n 表示分布式,用法-n=2 --reruns 3 :失败用例重跑 -k 根据字符串匹配关键字执行方法 eg:pytest -vs ./文件名 -k 'po(关键字)' pytest执行用例顺序 从上到下执行 @pytest.mark.run(order=3) 【用例失败重跑】前言以前出去面试的时候,经常会遇到一个问题,你的自动化如果根据一些网络原因,环境问题导致的用例失败,怎么进行失败重跑呢?以前用的unittest,没有自动的失败重跑内容,但是强大的pytest中有一个插件功能就能轻松帮助我们解决这个问题。 pytest-rerunfailurespytest-rerunfailures是属于pytest的插件,通常用来执行用例失败后重新执行。 安装:?pip install pytest-rerunfailures? 源码:https://github.com/pytest-dev/pytest-rerunfailres 其中pytest-rerunfailures有2种用法,一种是装饰器的方法,另一种是命令行参数的方法。 装饰器首先介绍下,如何通过装饰器的方法进行用例失败重跑。 格式:?@pytest.mark.flaky(reruns=3, reruns_delay=2)?? 使用方法和前面介绍的一些基本相似通过pytest.mark的形式加上flakey方法。我们看到其中有2个参数,其中reruns表示失败后执行几次,reruns_delay表示失败后等待几秒后,在重新执行 装饰器的方法不仅可以加到用例上,也可以加入到类上。 装饰器在用例上import pytest import random class Test01: @pytest.mark.flaky(reruns=3, reruns_delay=2) def test_01(self): a = random.randint(0, 3) print('---用例01---') print(a) assert a == 2 def test_02(self): print('---用例02---') assert 1 == 1 if __name__ == '__main__': pytest.main(['-vs']) 通过下图可以看到,我们执行用例1一共执行了3次,第一次设置的随机值为1和断言2不一致,进行重新跑,第2次随机值为0和断言2也不一样,第3次的时候断言相同了,用例通过 装饰器在类上import pytest import random @pytest.mark.flaky(reruns=3, reruns_delay=2) class Test01: def test_01(self): a = random.randint(0, 2) print('---用例01---') print('用例01中的a:%s'%a) assert a == 2 def test_02(self): c = random.randint(0, 2) print('---用例02---') print('用例02中的c:%s'%c) assert c == 1 if __name__ == '__main__': pytest.main(['-vs']) 通过下方执行结果可以很清楚的看到,我们class下的用例都进行了失败重跑。 命令行参数上述方法介绍了如何通过装饰器的方法进行用例失败重跑,下面介绍如何通过命令行的参数进行失败重跑。 格式:?pytest --reruns 3 --reruns-delay 2?或?pytest -vs --reruns=3 --reruns-delay=2? 参数详解:其中reruns空格3 表示失败重新运行3次,reruns-delay空格2 表示重新执行需要等待2秒。这里也可以使用等于来进行表示 import pytest import random class Test01: def test_01(self): a = random.randint(0, 2) print('---用例01---') print('用例01中的a:%s'%a) assert a == 2 def test_02(self): c = random.randint(0, 2) print('---用例02---') print('用例02中的c:%s'%c) assert c == 1 if __name__ == '__main__': pytest.main(['-vs'] 通过下图执行结果可以看出来,失败重跑已经生效。 注意事项:装饰器的方法和命令行的方法不能一起使用,不然的话会报错!!! 简单的通过实例介绍了用例失败重跑的两种方法,具体哪种方法好用,这个要看个人的喜好了。不过安静还是推荐使用命令行参数。 ? 感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走: ① 2000多本Python电子书(主流和经典的书籍应该都有了) ② Python标准库资料(最全中文版) ③ 项目源码(四五十个有趣且经典的练手项目及源码) ④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断) 学习资料可以找到我们呢的蓓蓓小姐姐【mashang-qq】备注【csdn000】免费领取哦 【必须备注】不然不会通过哦 可以自助拿走,群号913569736(备注“csdn000”)群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 4:42:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |