『德不孤』Pytest框架 — 2.Pytest的基本使用(一)

1、Pytest安装

CMD命令窗口执行Pytest测试框架安装命令:pip install -U pytest

(意思是如果没有安装,就进行安装,如果已安装就升级到最新版)

检查Pytest测试框架是否安装成功:pytest –-version

C:\Users\L>pytest --version
pytest 6.1.2

2、Pytest常用插件

Pytest有很多非常强大的第三方插件,并且这些插件能够实现很多实用的操作,并且还可以自定义Pytest插件。

比较好用的例如:

  • pytest-selenium:集成Selenium。
  • pytest-html:生成html格式的自动化测试报告。
  • pytest-rerunfailures:失败case重复执行。
  • pytest-xdist:测试用例分布式执行,也可以说是多CPU分发。
  • pytest-ordering:用于改变测试用例的执行顺序。
  • allure-pytest:用于生成美观的测试报告。

Pytest插件列表网址: https://plugincompat.herokuapp.com,里面包含很多插件包,⼤家可依据⼯作的需求选择使⽤。

说明:我常用安装Python工具包的方式。

一个Python项目中可能会安装很多安装包,再次创建虚拟环境(新项目)是需要重新安装的,这很麻烦也费时间,或者项目部署的时候避免重装。

可以将现有项目的所有安装包记录在requirements.txt文件,再另一个环境下一键安装所有安装包。

requirements.txt文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。

  • 使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:

    pip freeze > requirements.txt

  • 当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:

    pip install -r requirements.txt

如上所说:

我们可以把所有插件的模块名都写入一个.txt文件夹中。

pytest-html
pytest-rerunfailures
pytest-xdist
pytest-ordering
allure-pytest

然后在CMD命令行中执行pip install -r requirements.txt命令即可。(全局安装)

也可以在PyCharm中的命令行执行,但只针对于该项目。

提示:可以安装指定版本的模块

通过使用==>=<=> <来指定版本,不写则安装最新版。

例如:pip install pytest-xdist==2.2.0

将安装pytest-xdist模块2.2.0版本。

3、Pytest运行的第一个例子

我们直接在Pycharm例编写代码就可以。

"""
1.学习目标
    掌握pytest编写测试用例的基本方法
2.操作步骤
    2.1 导入pytest
    2.2 直接编写测试用例
        默认必须以test开头,你也可以到Pytest中修改测试例文件开头。
    2.3 执行用例
        pytest.main("-s 文件名")
3.python assert断言
    assert 条件,"异常信息"
3.需求
"""

# 1.导入pytest
import pytest


# 2.编写所需的测试用例
# 此类方法表示一个函数
def test_login():
    print("登录步骤")
    # pytest所用的断言是Python自身断言assert关键字
    assert "abcd" in "abcdefg"


def test_register():
    print("注册步骤")
    assert False


# 3.setup和teardown
# def setup_function():
#     print("打开浏览器/打开APP")
#
# def teardown_function():
#     print("关闭浏览器/关闭APP")

# 3.执行测试用例
if __name__ == '__main__':
    # 注意过格式,main参数是一个列表
    pytest.main(["-s", "test_pytest_01.py"])


"""
执行结果:
============================= test session starts =============================
platform win32 -- Python 3.7.7, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: J:\PyCharmWorkSpace\Pytest_d\pytest_demo
collected 2 items

test_pytest_01.py 
登录步骤.
注册步骤F
(. 表示成功 ,F 表示失败)
================================== FAILURES ===================================
________________________________ test_register ________________________________
(下面是失败的具体说明)
    def test_register():
        print("注册步骤")
>       assert False
E       assert False

test_pytest_01.py:28: AssertionError
=========================== short test summary info ===========================
FAILED test_pytest_01.py::test_register - assert False
========================= 1 failed, 1 passed in 0.09s =========================

Process finished with exit code 0
"""

4、Pytest框架的运行方式

(1)Pytest主函数模式

  • 运行所有测试用例:pytest.main()

    也可以加上参数:pytest.main(['-vs'])

    提示:注意是所用测试用例,包括不同文件上的测试用例,都会执行。

  • 执行指定文件的测试用例:

    pytest.main(['-s','-v','test_a.py'])

    也可以pytest.main(['-vs','test_a.py'])

  • 执行指定包下的所有测试用例:

    pytest.main(['-vs','./interface_testcase'])

提示:main函数的参数是一个列表数据类型。

(2)命令行模式

  • 运行所有测试用例:pytest

  • 执行指定文件的测试用例:pytest 文件路径/文件名

    例如:pytest -vs ./test_a.py

  • 执行指定包下的所有测试用例:pytest 包路径/包名

    例如:pytest -vs ./interface_testcase

(3)通过node id执行指定测试用例

nodeid由包名+模块文件名、分隔符、类名、方法名、函数名、参数构成,之间使用::进行分割,举例如下:

  • 运行模块中的指定用例类

    pytest -vs ./interface_testcase/test_interface.py::test_01_func

    或者

    pytest.main(['-vs' ./interface_testcase/test_interface.py::test_01_func)

  • 运行模块中的指定用例方法

    pytest -vs test_interface.py::test_01_func::test_method

    或者

    pytest.main(['-vs' test_interface.py::test_01_func::test_method)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容