python pytest接口自动化框架搭建(一)
1.首先安装pytest
pip install pytest
2.编写单测用例
在pytest框架中,有如下约束:
- 所有的单测文件名都需要满足
test_*.py格式或*_test.py格式。 - 在单测文件中,可以包含
test_开头的函数,也可以包含Test开头的类。 - 在单测类中,可以包含一个或多个
test_开头的函数。
此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
import pytest # content of test_sample.py
def func(x):
return x +
def test_answer():
assert func() ==
运行 pytest 或 指定特定文件 pytest -q test_sample.py
2.1 运行pytest 则遍历当前目录及子目录

看红色圈住的部分,可以得出它是循环遍历它当前目录和子目录
2.2 pytest -q test_class.py 指定文件运行

3.测试用例搜索
定义是: 搜索测试文件和测试用例的过程称为测试搜索.
想要被搜到,必须遵守pyteset的命名规则:
- 所有的单测文件名都需要满足
test_*.py格式或*_test.py格式。 - 在单测文件中,可以包含
test_开头的函数,也可以包含Test开头的类。 - 在单测类中,可以包含一个或多个
test_开头的函数。
为了好记,测试文件和测试函数必须以 test_开头,类是Test 开头.
4.控制台信息讲解


4.1. test session starts
这个是每次运行的分割线
4.2. platform 信息
1.win32 代表用的是windows ,MAC 显示的是darwin
2.接着显示的是Python 和 pytest的版本 , py 和pluggy是pytest包
3.rootdir 当前的起始目录, inifile是指配置文件,后边章节我会详细讲解.
4. collected 5 itemes 一共搜集了多少测试用例.
5. test_run01.py …
测试文件后边的“.” 代表测试通过, F(Fail),E(error),s(skip),X(xpass)>预期失败但是成功了
x(xfail)>预期失败执行也失败了.(下边我讲解具体详情)
6. 4 fail,1passed in 0.06 seconds======
表示通过的数量,没有通过也会总结数量 ,以及花费得时间.
5.使用命令行选项
有了命令行选项使其操作我们的用例变的非常灵活。Unittest 框架如果想执行复杂的场景
变得很鸡肋,这是pytest 优胜Unittest的地方.
以下列举的是常用的命令行选项,已经可以满足我们使用,如果个人想扩展,可以用
pytest --help 可以查到全部的命令 自己可以尝试下,在这不截图了
5.1 -–collect-only

从图片可以看出 一共搜集了5 个测试用例,在执行结果 是 no tests ran 说明只是搜集并不执行。
5.2. -k 选项
重要功能是利用你使用的表达式来 指定希望运行的测试用例.
比如: 你用 pytest -k “表达式”
pytest 根据 你输入的表达式内容进行去匹配 测试用例的名字里是否有这个表达式内容进行过滤.
然后再运行. 如果想查找多个内容,可以用 or 进行连接 ,请看下边的截图:

5.3.-m 选项
m 是marker的缩写,功能是执行自己标记的测试用例,我先讲解如何标记测试用例
如果我们想执行带有 first_case 怎么标记呢
请看下边的实例, 用到了@pytest.mark.first_case, 其中first_case 是装饰器用于标记的内容.
import pytest def inc(x):
return x + def test_answer():
assert inc() == @pytest.mark.first_case
def test_task01():
assert == def test_task02():
assert == def test_task03():
assert ==
pytest -m "first_case" --collect-only 或者
pytest -m "first_case"
PS E:\Python_Web\pytest-requests-allure> pytest -m "first_case" --collect-only
================================================= test session starts =================================================
platform win32 -- Python 3.7.2, pytest-4.5.0, py-1.8.0, pluggy-0.12.0
rootdir: E:\Python_Web\pytest-requests-allure
plugins: allure-pytest-2.6.3, html-1.20.0, metadata-1.8.0
collected 8 items / 6 deselected / 2 selected
<Module test_module.py>
<Function test_task01>
<Function test_task02> ================================================== warnings summary ===================================================
d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324
d:\software\python\python37\lib\site-packages\_pytest\mark\structures.py:324: PytestUnknownMarkWarning: Unknown pytest.mark.first_case - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/latest/mark.html
PytestUnknownMarkWarning, -- Docs: https://docs.pytest.org/en/latest/warnings.html
====================================== 6 deselected, 1 warnings in 0.11 seconds =======================================
如果想用多个marker ,可以这么写 “marker1 or marker2” 意思是执行 mark1 和mark2所有测试用例
也可以用not 过滤, “marker1 and not marker2” 意思是 执行marker1 并且不包含marker2用例.
6. -x 选项
这个选项是为debug 准备的,正常的流程 是如果断言失败,它会继续执行并不会断掉.如果想在第一个断言失败我就不让继续执行,就可以用-x选项. 遇到断言失败就停止执行.有利于我们查找原因.
7.–lf 选项 (lf 是 last failed 的缩写)
这个选项用处很大,直接过滤出最后一个fail 的测试用例,有利于我们查找失败的用例,解决好,我们再运行这个if 选项 ,可以再找出最后一个fail,省了我们再执行成功的用例,节省我们的时间 .
8.–ff (是 failed first)
和 --lf 不同是的是,它优先运行失败的case ,再把之前运行通过的也要运行. 自己尝试下,这里不做演示
9.-v 选项
这个会在控制台输出更多的内容,最明显的区别就是每个文件中的每个测试用例都占一行(先前是每个文件占一行)
我把这两种情况都打印出来,看下


10 --tb=style 选项
这个选项用于对失败输出信息的显示方式,
输出的信息一般包括 1. 失败出现在哪一行2.是什么失败 3.怎么失败的 这三要素是信息追溯
我们常用的style 有 short ,no, line
实例如下:

no 屏蔽所有的回溯信息,只是显示哪个文件哪个case 失败,
line 具体到哪个assert
short 具体到哪个参数,列举出更详细的失败信息.
实际工作中 -q 和 --tb=line 组合 已经够用.
python pytest接口自动化框架搭建(一)的更多相关文章
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- python+pytest接口自动化(11)-测试函数、测试类/测试方法的封装
前言 在python+pytest 接口自动化系列中,我们之前的文章基本都没有将代码进行封装,但实际编写自动化测试脚本中,我们都需要将测试代码进行封装,才能被测试框架识别执行. 例如单个接口的请求代码 ...
- Jmeter+ant+Jenkins接口自动化框架搭建
摘自:https://testerhome.com/topics/13389 一.背景 上一篇讲了Jmeter 接口自动化-脚本数据分离实例,我们知道怎么利用Jmeter去编写接口自动化脚本,但是接 ...
- python+requests接口自动化框架
为什么要做接口自动化框架 1.业务与配置的分离 2.数据与程序的分离:数据的变更不影响程序 3.有日志功能,实现无人值守 4.自动发送测试报告 5.不懂编程的测试人员也可以进行测试 正常接口测试的流程 ...
- 接口自动化框架搭建Unittes+HTMLTestRunner
本次主要尝试搭建接口自动化框架,基于 unittest+HTMLTestRunner 框架主要模块: config: 存放配置文件 lib: 封装了一些接口前置函数:处理各种事物 log: 存放生成的 ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【三】
经过上两篇文章的讲解,我们已经完成接口自动化的基础框架,现在开始根据实际项目丰满起来. 在PyCharm中新建项目,项目工程结构如下: config:配置文件夹,可以将一些全局变量放于配置文件中,方便 ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【一】
公司项目启用新框架,前后端分离,所以接口测试成为测试工作中不可缺失的一个环节,现在将从0开始搭建接口自动化测试框架的路程,一步步记录下来. 开发语言我们采用Python+第三方库Requests,测试 ...
- python接口自动化框架搭建
一.在搭建接口自动化测试框架前,我觉得先需要想明白以下几点: ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求.响应由哪些部分组成,常用的meth ...
- python+pytest接口自动化(13)-token关联登录
在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示 ...
随机推荐
- .Net Core 中GC的工作原理
前言 .NET 中GC管理你服务的内存分配和释放,GC是运行公共语言运行时(CLR Common Language Runtime)中,GC可以帮助开发人员有效的分配内存和和释放内存,大多数情况下是不 ...
- 四层发现-UDP发现
udp发现要注意选择一个不常用的端口,如果目标ip在up时目标端口是开放状态,那么不管目标ip是否为up状态,都不会收到任何回应,只有在目标ip为down状态且目标端口为关闭状态,才会返回一个目标不可 ...
- 常用电子邮件协议服务POP3/IMAP/SMTP/Exchange
标题: 常用电子邮件协议服务POP3/IMAP/SMTP/Exchange 作者: 梦幻之心星 347369787@QQ.com 标签: [电子邮件, 服务, 协议] 目录: [客户端] 日期: 20 ...
- 状态机模式 与 ajax 的结合运用
太神奇了,昨晚做了个梦,梦中我悟出一个道理:凡是涉及到异步操作而且需要返回值的函数,一定要封装成 Promise 的形式,假如返回值取决于多个异步操作的结果,那么需要对每个异步操作进行状态的设计,而且 ...
- 佛祖保佑,永无BUG d=====( ̄▽ ̄*)b
博主最近在网上看到了一个佛祖保佑永无BUG的帖子,各种符号画像层出不穷.也不知道是哪个人开的头,一堆人跟着转载. /** * 江城子 . 程序员之歌 * * 十年生死两茫茫,写程序,到天亮. * 千行 ...
- ssh -i 密钥文件无法登陆问题
一.用ssh 带密钥文件登录时候,发生以下报错 [root@99cloud1 ~]# ssh -i hz-keypair-demo.pem centos@172.16.17.104The authen ...
- vue全家桶(3.1)
4.数据请求 4.1.axios是什么? axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它有以下特征: 从浏览器中创建 XMLHttpRequest 从 no ...
- Docker入门——理解Docker的核心概念
1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...
- JavaScript基础对象创建模式之链式调用模式(Chaining Pattern)(029)
链式调用模式允许一个接一个地调用对象的方法.这种模式不考虑保存函数的返回值,所以整个调用可以在同一行内完成: myobj.method1("hello").method2().me ...
- 十位大牛做出的web前端开发规范总结
Web前端作为开发团队中不可或缺的一部分,需要按照相关规定进行合理编写(一部分不良习惯可能给自己和他人造成不必要的麻烦).不同公司不同团队具有不同的规范和文档.下面是根据不同企业和团队的要求进行全面详 ...