文章目录

  • 单元测试介绍
  • 常用框架
  • pytest介绍
  • 默认的测试用例编写规则
  • 执行方式
  • 测试用例执行顺序
  • pytest.ini配置文件
  • 测试用例分组执行
  • 跳过测试用例
  • 生成html测试报告(不常用)

单元测试介绍

单元测试: 在软件开发过程中,对软件的最小单位(函数、类等)进行正确性的检查测试(一般由开发人员完成)。是自动化测试的一部分。

常用框架

java中常用junit / testng,
python 中常用unittest / pytest

单元测试框架的作用:从项目中的多个文件中找到测试用例,然后按照特定的顺序、规则依次执行,生成结果后使用断言方式判断是否符合预期;最后生成测试报告。

pytest介绍

  1. python实现的单元测试框架,非常成熟,灵活易上手;
  2. 可以selenium/requests/appium结合实现web自动化、app自动化等;
  3. 可以跳过用例、重跑失败的用例;
  4. 可以结合allure-pytest插件实现美观的测试报告;
  5. 插件强大,结合pytest-html生成html格式的测试报告;结合pytest-xdist实现分布式执行测试用例;pytest-ordering 改变测试用例的执行顺序;结合pytest-rerunfailures重跑失败的用例。

以上pytest库及插件的安装,可以使用递归式安装:

# 1. 将所有的库名字放入requirements.txt中
# pytest
# pytest-html
# ...# 2. 递归安装
pip install -r requirements.txt# -U 表示更新# 查看
pytest --version
pytest --help

默认的测试用例编写规则

pytest默认的测试用例规则如下:

  1. 测试目录 test_case;
  2. 测试模块test_xxx.py;
  3. 测试类 TestXxxx,且没有init方法;
  4. 测试方法(用例)test_xxx, 如test_001(self)
import pytest# 模拟被测试函数单元
def func(a, b):return a ** b# 测试类 以Test开头,不能有init
class TestLaufing:# 测试用例(方法),以test_开头def test_func(self):a, b = 2, 3c = 8assert c == func(a, b)print("test func 成功")def test_002(self):assert 1 == 2# 跳过如下测试用例@pytest.mark.skipdef test_003(self):assert 1 == 1if __name__ == '__main__':# 主函数方式执行# 执行所有的测试用例# 执行该模块即可pytest.main()

测试结果如下:

. 代表测试通过;
F 代表测试失败;
s 代表测试用例跳过;
E 代表有异常;

执行方式

测试用例的执行方法如下:

  1. 主函数形式
    创建run_pytest_main.py模块,名字随意,这里只是为了执行主函数,然后放入项目的根目录。内部执行主函数:
# 导包
import pytestif __name__ == '__main__':# 主函数方式执行# 执行web_app目录下的所有测试用例pytest.main(["-vs", "web_app"])

说明:
pytest.main() 执行所有的测试用例;
pytest.main([“-v”, “web_app”]) 执行该目录下的所有的测试用例;
pytest.main([“-v”, “./web_app/test_xxx.py”]) 执行该目录中指定模块的测试用例;
pytest.main([“-v”, “web_app/test_pytest_demo.py::TestWeb::test_func”]) 指定单个测试用例;

  1. 命令行形式
    切换到项目的根目录下:
    python -m pytest 执行项目中所有的测试用例;(注意测试模块等不能重名)
    python -m pytest -v app 只执行app目录中的测试用例;
    python -m pytest -v app/test_xxx.py 只执行app目录中指定模块的测试用例;
    python -m pytest -v app/test_xxx.py::TestApp::test_func 只执行app目录中指定模块的单个测试用例;
  2. 配置文件形式(pytest.ini)
    稍后介绍

参数说明:
-v 输出详细信息;
-s 输出print打印的信息;
-vs 可以结合使用;
-n 多线程执行(必须安装pytest-xdist 插件);
pytest.main([‘-vs’, ‘app’, ‘-n=2’]) ;
pytest -vs app -n 2 ;
相当于有个两个线程的线程池,一次跑两个用例(两个线程)。
–maxfail=2 两个用例失败后退出测试;
pytest.main([“-vs”, “web_app”, “-n=2”, “–maxfail=2”])
-x 有一个测试用例失败即退出测试;
-q 删除更少的信息;
–reruns 5 失败用例的重跑(num次);需要安装pytest-rerunfailures
-k 匹配测试用例的部分字符串;匹配到则执行用例;
如 -k “_laufing”

测试用例执行顺序

unittest: 按照ASCII码执行;
pytest: 按照(测试类中的用例)从上到下的顺序;

要改变执行顺序:

  1. 安装插件pytest-ordering
  2. @pytest.mark.run(order=1) 装饰测试用例
# 测试类 以Test开头,不能有init
class TestWeb:# 测试用例(方法),以test_开头def test_func(self):time.sleep(3)a, b = 2, 3c = 8assert c == func(a, b)print("test func 成功")def test_002(self):time.sleep(3)assert 1 == 2# 跳过如下测试用例@pytest.mark.skipdef test_003(self):assert 1 == 1@pytest.mark.run(order=1)def test_004(self):time.sleep(3)assert 1 == 2

执行结果:

pytest.ini配置文件

它是pytest的核心配置文件,放在项目的根目录下;
pytest执行测试(不管主函数形式还是命令行形式)前,必先读取配置文件,可以改变其默认行为;
配置文件编码格式必须是ANSI,可以使用txt修改编码格式;

配置如下:
模块名、类名、函数名可以不按照默认的规则,实现随意命名。

测试用例分组执行

使用mark标记,可以将不同模块的用例标记为一组,然后分组执行。

如下:

  1. app目录> test_app_module.py:
import pytest# 模拟被测试函数单元
def func(a, b):return a ** b# 配置文件可以改变默认的行为
class TestAppClass:# 测试用例(方法),以test_开头def test_func(self):a, b = 2, 3c = 8assert c == func(a, b)print("test func 成功")@pytest.mark.user1  # 标记为user1组def test_app_002(self):print("app_002: user1组")assert 1 == 2# 跳过如下测试用例@pytest.mark.skipdef test_003(self):assert 1 == 1
  1. web_app目录>test_web_app_module.py
import pytest# 模拟被测试函数单元
def func(a, b):return a ** b# 测试类 以Test开头,不能有init
class TestWebAppClass:# 测试用例(方法),以test_开头def test_func(self):a, b = 2, 3c = 8assert c == func(a, b)print("test func 成功")@pytest.mark.user1  # 标记为user1组def test_web_app_002(self):print("web app: user1组")assert 1 == 2# 跳过如下测试用例@pytest.mark.skipdef test_003(self):assert 1 == 1
  1. pytest.ini配置文件(项目根目录下且ANSI编码)
[pytest]
addopts = -vs
testpaths = ./
python_files = test_*.py
python_classes = Test*
python_functions = test
# 从以上选择到的用例中再选择分组
markers =user1: user1 groupuser2: user2 group

使用txt记事本打开,另存为修改编码方式

  1. 执行user1分组的测试用例
pytest -m 'user1'# 执行多个分组
pytest -m 'user1 or user2'

跳过测试用例

# 无条件跳过
@pytest.mark.skip(reason="xxx")
def test_002(self):assert 1 == 2# 有条件的跳过
num = 6
@pytest.mark.skipif(num >= 5, reason="xxx")
def test_002(self):assert 1 == 2

生成html测试报告(不常用)

  1. 安装pytest-html
  2. 添加–html参数
# 主函数形式
pytest.main(['-vs', '--html=./report.html', 'test_case'])
# 命令行
pytest -vs test_case --html ./report.html# 配置文件
addopts = -vs --html ./report.html

pytest自动化测试相关推荐

  1. Pytest 自动化测试框架

    Pytest 自动化测试框架 Pytest和Unittest测试框架的区别? 如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上 ...

  2. pytest自动化测试框架,真正做到从0到1由浅入深详细讲解【万字级】

    目录 嗨咯铁汁们,很久不见,我还是你们的老朋友凡叔,这里也感谢各位小伙伴的点赞和关注,你们的三连是我最大的动力哈,我也不会辜负各位的期盼,这里呢给大家出了一个pytest自动化测试框架由浅入深详细讲解 ...

  3. 一、Pytest自动化测试框架 — Pytest和unittest测试框架原理

    目录 前言 ###文章内容有配套的学习视频和笔记都放在了文章末尾### 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5 ...

  4. Selenium+Pytest自动化测试框架实战

    前言 selenium自动化+ pytest测试框架 本章你需要 一定的python基础--至少明白类与对象,封装继承 一定的selenium基础--本篇不讲selenium,不会的可以自己去看sel ...

  5. Pytest自动化测试框架教程17-安装和使用插件编写

    安装和使用插件 本节讨论如何安装和使用第三方插件.有关编写自己的插件的信息,请参阅编写插件. 安装第三方插件可以通过以下方式轻松完成pip: Copypip install pytest-NAME p ...

  6. 【python做接口测试的学习记录day10——pytest自动化测试框架之接口加密】

    通常出于安全性考虑,开发会对接口参数进行加密,加密方式有很多种,例如MD5.Base64.RSA双密钥加密方式等,下面我们以MD5加密方式的登录接口为例,此接口对密码进行了加密,如果测试时直接使用未加 ...

  7. Python Pytest自动化测试 断言失败后续代码继续执行

    Time will tell. 做自动化测试时我们一般会一个用例写多个断言,而当第一个断言失败后,后面的代码就不会执行.这时我们可以引进pytest-assume插件来解决这些问题. 一.安装 pip ...

  8. Pytest自动化测试框架

    自动化测试 测试环境搭建httpbin.org开源接口网站 http://www.httpbin.org/这个网站是开放的用来做测试用网站,外网注意看脸进 笔者本来想搭一个docker+wsl2+gi ...

  9. 技术干货 | pytest 自动化测试实战展示

    pytest是目前企业里面使用最多.最流行的Python的单元测试框架,那我们今天就使用这个框架来完成 一个网易163邮箱登录的自动化实战案例. 下面我们先把我们案例需要的工具进行相关的介绍: pyt ...

最新文章

  1. Openfiler之一:Openfiler的安装
  2. MySQL语法语句大全
  3. android真实项目教程(六)——落叶醉赤壁_by_CJJ
  4. java设置手指点击_java设置鼠标在jpanel时变为手指形状
  5. PyCharm中的一些设置
  6. 【嗅探工具】无线WIFI密码破解
  7. calipso是什么意思_porridge是什么意思_porridge的翻译_音标_读音_用法_例句_爱词霸在线词典...
  8. 2.leapmotion之开发指南
  9. win用户计算机批量添加用户,win10系统巧用cmd命令快速创建新账户的技巧
  10. 计算机英语的词汇量,英语词汇量多少才够用
  11. 安卓高级面试知识整理
  12. 【vue大师晋级之路第二集:深入了解组件】第3章——自定义事件
  13. 《大唐豪侠》架构开发纪实
  14. 七夕活动运营,社交游戏类应用如何做好商品管理
  15. 计算机二级笔试题好难,计算机二级考试试题经验分享
  16. Windows系统中设置软件的开机自动启动
  17. Excel 使用VBA批量替换(手把手包会)
  18. 工程打包是什么意思_承包、发包、分包各是什么意思?
  19. 打印折痕(左神2020)
  20. masm32开发com组件介绍[一][二][三]

热门文章

  1. kdevelop 安装
  2. printf及无符号型整数
  3. 一个小插曲-->调试PID的工具
  4. [IMWeb训练营]-团队作业
  5. 交易猫源码完整搭建教程
  6. 设计模式六大原则及常用模式详解
  7. Nginx 之 realip模块 使用详解
  8. 12、 Android+RK3399 pro+USB直连摄像头+NCNN+Nanodet进行检测
  9. Python实现梯度下降
  10. 挪威飞鸽_我成为挪威高级分析初级顾问的美好旅程