欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python教程之pytest命令行方式运行用例

程序员文章站 2022-05-10 17:42:28
...

目录
前言
pycharm里命令行运行用例
终端中使用pytest
用例全部运行
打印详情-v
指定组别
使用表达式指定某些用例-k
遇到失败即停止运行-x
指定运行某个测试py文件
指定运行某个class
指定运行某个方法:
其他
总结
前言
用命令行方式调用用例是我们最常用的方式,这方面确实比java的TestNG框架要好用许多,至少不用写xml文件,为了提供定制化运行用例的方式,pytest提供了许多运行命令以供定制化运行某一类测试用例或者某个测试用例等;

pycharm里命令行运行用例
在pycharm里写好了测试用例后如何运行呢?pycharm里好像并没有像eclipse里提供TestNG用的插件一样可以一键执行的方式,那么我们可以使用命令行的方式来进行,如下图所示为一个用例文件:

代码如下:

-- coding: utf-8 --

import pytest

class Test_simple():

  1. @pytest.mark.test
  2. def test_case1(self):
  3. print("testCase1")
  4. tof = True
  5. assert tof
  6. @pytest.mark.normal
  7. @pytest.mark.test
  8. def test_case2(self):
  9. print("testCase2")
  10. tof = False
  11. assert tof
  12. def test_case3(self):
  13. print("testCase3")
  14. assert True
  15. @pytest.mark.test
  16. def setup_class(self):
  17. print("用于test组")
  18. @pytest.mark.normal
  19. def setup_class(self):
  20. print("用于normal组")

如上所示添加了一个名为testSimple的工程,内添加了一些测试用例即Test_simple;

想要运行用例时可以打开下方的Terminal窗口:

会自动切换到当前工程目录下,而后即可使用pytest的命令了,如下对运行结果简单做下说明:

终端中使用pytest
在终端中使用pytest也是和在pycharm中类似,如下以windows系统为例:

先切换到用例所在工程或者目录而后运行pytest即可,如下:

linux系统中也是同样的使用方法,只是如果没有为pytest添加软连接,则需要在pytest前面加上python命令;

用例全部运行
全部运行时不需要添加任何后缀,只需要添加命令pytest即可,此时打印的信息比较简单:

E:\pyspace\testSimple>pytest
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 3 items

testcase\Test_simple.py .F. [100%]

=============================================================================================================================== FAILURES ===============================================================================================================================
__ Testsimple.testcase2 __

self = <testcase.Test_simple.Test_simple object at 0x00000000038508D0>

  1. @pytest.mark.normal
  2. @pytest.mark.test
  3. def test_case2(self):
  4. print("testCase2")
  5. tof = False
  1. assert tof

E assert False

testcase\Test_simple.py:18: AssertionError
————————————————————————————————————————————————————————————- Captured stdout call ————————————————————————————————————————————————————————————-
testCase2
================================================================================================================== 1 failed, 2 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>
打印详情-v
如上图所示,只显示了用例时成功还是失败,至于里边的log则没有打印,那么如果我们想要看运行详细信息怎么办呢?可以加上-v标签,如下:

E:\pyspace\testSimple>pytest -v
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 3 items

testcase/Test_simple.py::Test_simple::test_case1 PASSED [ 33%]
testcase/Test_simple.py::Test_simple::test_case2 FAILED [ 66%]
testcase/Test_simple.py::Test_simple::test_case3 PASSED [100%]

=============================================================================================================================== FAILURES ===============================================================================================================================
__ Testsimple.testcase2 __

self = <testcase.Test_simple.Test_simple object at 0x000000000382EDA0>

  1. @pytest.mark.normal
  2. @pytest.mark.test
  3. def test_case2(self):
  4. print("testCase2")
  5. tof = False
  1. assert tof

E assert False

testcase\Test_simple.py:18: AssertionError
————————————————————————————————————————————————————————————- Captured stdout call ————————————————————————————————————————————————————————————-
testCase2
================================================================================================================== 1 failed, 2 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>
如上图会把详细信息都打印出来

指定组别
如果用例中包含多个分组,想要只运行其中一个组,则使用-m “组名”的方式,依然使用如上代码,运行命令和结果如下:

E:\pyspace\testSimple>pytest -s -m “normal”
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 3 items / 2 deselected / 1 selected

testcase\Test_simple.py 用于normal组
testCase2
F

=============================================================================================================================== FAILURES ===============================================================================================================================
__ Testsimple.testcase2 __

self = <testcase.Test_simple.Test_simple object at 0x00000000036D27F0>

  1. @pytest.mark.normal
  2. @pytest.mark.test
  3. def test_case2(self):
  4. print("testCase2")
  5. tof = False
  1. assert tof

E assert False

testcase\Test_simple.py:18: AssertionError
================================================================================================================ 1 failed, 2 deselected in 0.07 seconds ================================================================================================================

E:\pyspace\testSimple>
使用表达式指定某些用例-k
-k选项允许我们设置表达式来运行某些用例,如下传参就只运行了test_case1和test_case2

E:\pyspace\testSimple>pytest -v -k “case1 or case2”
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 3 items / 1 deselected / 2 selected

testcase/Testsimple.py::Test_simple::test_case1 PASSED [ 50%]
testcase/Test_simple.py::Test_simple::test_case2 FAILED [100%]
表达式的写法有许多,可以用全称如test_case1这样也可以去掉test
,除了or外也可以使用not来指定那些用例不跑;

遇到失败即停止运行-x
pytest的原本运行规则是每条用例均执行,不管是否有失败,如果我们想在用例运行时遇到失败即停止,则可以使用-x,如下所示,第二条用例失败后则不再运行第三条用例:

E:\pyspace\testSimple>pytest -v -x
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 3 items

testcase/Test_simple.py::Test_simple::test_case1 PASSED [ 33%]
testcase/Test_simple.py::Test_simple::test_case2 FAILED [ 66%]

=============================================================================================================================== FAILURES ===============================================================================================================================
__ Testsimple.testcase2 __

self = <testcase.Test_simple.Test_simple object at 0x00000000037A9B00>

  1. @pytest.mark.normal
  2. @pytest.mark.test
  3. def test_case2(self):
  4. print("testCase2")
  5. tof = False
  1. assert tof

E assert False

testcase\Test_simple.py:18: AssertionError
————————————————————————————————————————————————————————————- Captured stdout call ————————————————————————————————————————————————————————————-
testCase2
================================================================================================================== 1 failed, 1 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>
指定运行某个测试py文件
指定运行某个py文件,只需要接上文件相对路径即可:

E:\pyspace\testSimple>pytest -v testcase/Test_example.py
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 1 item

testcase/Test_example.py::Test_example::test_aaa PASSED [100%]

======================================================================================================================= 1 passed in 0.02 seconds =======================================================================================================================

E:\pyspace\testSimple>
指定运行某个class
写法为:py文件路径::class名称,范例如下:

E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 1 item

testcase/Test_example.py::Test_example2::test_bbb PASSED [100%]

======================================================================================================================= 1 passed in 0.08 seconds =======================================================================================================================

E:\pyspace\testSimple>
指定运行某个方法:
写法为:py文件路径::class名称::method名称,范例如下:

E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2
========================================================================================================================= test session starts ==========================================================================================================================
platform win32 — Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 — e:\software\python\python3.7\python.exe
cachedir: .pytest_cache
metadata: {‘Python’: ‘3.7.1’, ‘Platform’: ‘Windows-7-6.1.7601-SP1’, ‘Packages’: {‘pytest’: ‘4.4.1’, ‘py’: ‘1.8.0’, ‘pluggy’: ‘0.11.0’}, ‘Plugins’: {‘metadata’: ‘1.8.0’, ‘html’: ‘1.20.0’, ‘allure-pytest’: ‘2.6.3’}, ‘JAVA_HOME’: ‘D:\project\jdk1.8’}
rootdir: E:\pyspace\testSimple
plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3
collected 1 item

testcase/Test_example.py::Test_example2::test_bbb PASSED [100%]

======================================================================================================================= 1 passed in 0.08 seconds =======================================================================================================================

E:\pyspace\testSimple>
如上几种也可以组合使用;

其他
pytest还包含许多其他用法,具体用法可以使用pytest —help来查看,如下:

总结
到此这篇关于Python教程之pytest命令行方式运行的文章就介绍到这了,更多相关pytest命令行方式运行内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-12-24
Pytest allure 命令行参数的使用

先看看 allure 命令的帮助文档 cmd 敲 allure -h allure 命令的语法格式 allure [options] [command] [command options] options 列表 Options: —help 命令行帮助文档 -q, —quiet 切换至安静模式 Default: false -v, —verbose 切换至冗长模式 Default: false —version 版本信息 Default: false command 列表 generat
python的pytest框架之命令行参数详解(下)

前言 上篇说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则! pytest执行用例命令行参数 —collect-only:罗列出所有当前目录下所有的测试模块,测试类及测试函数 —tb=style:屏蔽测试用例执行输出的回溯信息,可以简化用例失败时的输出信息.style可以是 on,line,short,具体区别请自行体验 —lf:当一次用例执行完成后,如果其中存在失败的测试用例,那么我们可以使用此命令重新运行失败的测试用例 我

python的pytest框架之命令行参数详解(上)

前言 pytest是一款强大的python自动化测试工具,可以胜任各种类型或者级别的软件测试工作.pytest提供了丰富的功能,包括assert重写,第三方插件,以及其他测试工具无法比拟的fixture模型.pytest是一个软件测试框架,是一款命令行工具,可以自动找到测试用例执行,并且回报测试结果.有丰富的基础库,可以大幅度提高用户编写测试用例的效率.具备扩展性,用户可以自己编写插件,或者安装第三方提供的插件.可以很容易地与其他工具集成到一起使用.比如持续集成,web自动化测试等. 下面列举了
PHP 命令行参数详解及应用
复制代码 代码如下: # 不带参数的执行格式 php安装目录/bin/php scriptname.php # 带参数的执行格式 php安装目录/bin/php scriptname.php [参数1] [参数2] ….. 在scriptname.php通过$argv和$argc访问参数 # $argv(正式写法$_SERVER[‘argv’])数组保存着传递的全部参数,需要注意的是第一个参数$argv[0] / $_SERVER[‘argv’][0] 为执行脚本的名称如, scriptna

python 如何利用argparse解析命令行参数
命令行参数工具是我们非常常用的工具,比如当我们做实验希望调节参数的时候,如果参数都是通过硬编码写在代码当中的话,我们每次修改参数都需要修改对应的代码和逻辑显然这不太方便.比较好的办法就是把必要的参数设置成通过命令行传入的形式,这样我们只需要在运行的时候修改参数就可以了. sys.argv 解析命令行传入参数最简单的办法就是通过sys.argv,sys.argv可以获取到我们通过命令行传入的参数. import sys print(sys.argv) 用法很简单,只需要调用sys.argv即可.a
python matplotlib:plt.scatter() 大小和颜色参数详解
语法 plt.scatter(x, y, s=20, c=’b’) 大小s默认为20,s=0时点不显示:颜色c默认为蓝色. 为每一个点指定大小和颜色 有时我们需要为每一个点指定大小和方向,以区分不同的点.这时,可以向s和c传入列表.如: import matplotlib.pyplot as plt import numpy as np x = list(range(1, 7)) plt.scatter(x, x, s=10np.array(x)*2, c=x) plt.show() 参数s
Python中最好用的命令行参数解析工具(argparse)
Python 做为一个脚本语言,可以很方便地写各种工具.当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现). 如果要以命令行执行,那你需要解析一个命令行参数解析的模块来帮你做这个苦力活. Python 本身就提供了三个命令行参数解析模块,我这里罗列一下它们的大致情况供你了解. getopt,只能简单的处理命令行参数 optparse,功能强大,易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. argparse,使其更加容易的编
在IIS上重新注册.NET Framework 2.0的命令和参数详解

我们有时可能需要将 .Net 重新注册到 IIS 上面,可以用下面的命令行来操作. 如果您电脑已经安装了 IIS 然后再装.net 在安装过程中 .net 是会自动帮您注册的,反之则需要注册. 打开程序-运行-cmd:输入一下命令重新注册IIS 复制代码 代码如下: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 注册成功就可以在IIS里看到: 以下是aspnet_regiis.exe参数的说明信息: -i –

关于读取popen输出结果时未截断字符串导致的命令行注入详解
0x00 前言 这种命令行注入在pwn中出现的比较少,所以记录分享一下. 0x01 命令行注入介绍 熟悉web安全的话就知道,如果对特殊字符过滤不当,会引发sql注入或者xss等安全漏洞.其中,命令行注入较为严重,因为可以直接拿到漏洞程序当前权限的OSshell. 然而,命令行注入不仅在web中会出现,在C语言程序中,也会出现命令行注入的漏洞.比方说这道pwn题,就是调用system时,没有对输入数据进行\0截断以及对特殊字符处理不当而导致的. 命令行注入相对于其他二进制漏洞相比利用比较简单,比
python命令行参数解析OptionParser类用法实例

本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下: from optparse import OptionParser parser = OptionParser(usage=”usage:%prog [optinos] filepath”) parser.add_option(“-t”, “—timeout”, action = “store”, type =