前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python测试框架pytest-基础演示

Python测试框架pytest-基础演示

作者头像
怪盗LYL
发布2022-06-13 12:12:36
5030
发布2022-06-13 12:12:36
举报
文章被收录于专栏:测试开发真货

一安装:

pip安装,使用以下命令安装pytest:

代码语言:javascript
复制
pip install pytest

创建一个文件这里我起名叫Testpytest.py,新建以后默认有上面那段注释,方法为在File - Settings - Editor - File and Code Templates路径

代码语言:javascript
复制
#-*- codeing = utf-8 -*-
#@Time: ${DATE} ${TIME}
#@Author: 你的名字
#@File: ${NAME}.py
#@Software: ${PRODUCT_NAME}

二:基础运行命令

新建一个函数返回入参相加,创建一个测试类,测试类要以Test开头,没有__init__函数(会报错cannot collect test class 'TestClass' because it has a __init__ constructor ):

代码语言:javascript
复制
def add(x, y):
    return x + y
class TestClass(object):
    # 测试是否符合预期
    def test_add(self):
        assert add(1,2) == 3

在控制台运行pytest Testpytest.py命令,下图中的.表示有一个用例通过。

代码语言:javascript
复制
pytest Testpytest.py #pytest框架执行Testpytest.py文件中找到以 test 开头函数并执行

如果只运行pytest则会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行。我们的名字为Testpytest所以不会被找到。

修改我们的文件名为test_pytest.py(test_*.py或者*_test.py),再次运行pytest发现找到了文件并执行其中的test函数。

加参数:

-v用于显示每个测试函数的执行结果,从输入中可以看到执行了test_pytest.py文件TestClass类的test_add方法,由此引出直接运行方法的命令,新加一个函数test_true。

代码语言:javascript
复制
def add(x, y):
    return x + y
class TestClass(object):
    # 测试是否符合预期
    def test_add(self):
        assert add(1,2) == 3
    def test_true(self):
        assert 1==1

运行命令pytest -v test_pytest.py::TestClass::test_true,可以看到只运行了test_true函数,运行pytest -v test_pytest.py::TestClass,则会执行TestClass下面两个函数。

代码语言:javascript
复制
pytest -v test_pytest.py::TestClass
-q 简单打印,只打印测试用例的执行结果
-s 详细打印,修改测试函数加上输出。
代码语言:javascript
复制
def add(x, y):
    return x + y
class TestClass(object):
    # 测试是否符合预期
    def test_add(self):
        print("测试test_add")
        assert add(1,2) == 3
    def test_true(self):
        print("测试test_true")
        assert 1==1

执行

代码语言:javascript
复制
pytest -v test_pytest.py::TestClass

,可以看到是没有输出的,

代码语言:javascript
复制
执行 pytest -s test_pytest.py::TestClass
代码语言:javascript
复制
pytest -s -v test_pytest.py::TestClass

可以看到我们测试方法里面的输出语句也输出了。

-x 遇到错误时停止测试
代码语言:javascript
复制
-k 模糊匹配

新增一个函数为TestClass2,执行命令pytest -v -s -k "Two",-k “类名”表示任意位置模糊匹配类名的所有类,并执行匹配到的这些类的所有方法。

代码语言:javascript
复制
def add(x, y):
    return x + y
class TestClassOne(object):
    # 测试是否符合预期
    def test_add(self):
        print("测试test_add")
        assert add(1,2) == 3
    def test_true(self):
        print("测试test_true")
        assert 1==1
class TestClassTwo(object):
    # 测试是否符合预期
    def test_addTwo(self):
        print("测试test_add2")
        assert add(1,2) == 3
    def test_trueTwo(self):
        print("测试test_true2")
        assert 1==1

-k “方法名”表示任意位置模糊匹配方法名的所有方法,并执行匹配到的这些方法,执行pytest -v -s -k "test_trueTwo",执行了匹配的函数。

上面是网上看到的,经过我自己测试发现-k "关键字"里面实际是同时匹配方法和类,修改代码如下。执行命令pytest -v -s -k "Two",同时匹配了类和方法。

代码语言:javascript
复制
def add(x, y):
    return x + y
class TestClass(object):
    # 测试是否符合预期
    def test_addTwo(self):
        print("测试test_add")
        assert add(1,2) == 3
    def test_true(self):
        print("测试test_true")
        assert 1==1
class TestClassTwo(object):
    # 测试是否符合预期
    def test_addTwo(self):
        print("测试test_add2")
        assert add(1,2) == 3
    def test_trueTwo(self):
        print("测试test_true2")
        assert 1==1

-k “类名 and not 方法名表示任意位置模糊匹配类名的所有类,并执行匹配到的这些类的所有方法,但不会执行任意位置模糊匹配的方法。执行命令pytest -v -s -k "Class and not add"。可以看到执行了两个类里面函数名没有add的方法。

pytest -s -k "关键字 or 关键字"同时匹配不同的用例名称,

代码语言:javascript
复制
pytest -v -s -k "TestClass1 or test_addTwo"

pycharm运行pytest,设置路径如下:File->settings->python integrated tools->Testing。

右键运行。可以看到我们运行默认使用了py test测试框架调用了当前文件。

如果不想修改默认测试单元,可以添加以下命 令,注意看参数传法。 #-*- codeing = utf-8 -*- #@Time: 2021/8/19 0:05 #@Author: 怪盗LYL #@File: test_pytest.py #@Software: PyCharm import pytest def add(x, y): return x + y class TestClass1(object): # 测试是否符合预期 def test_add(self): print("测试test_add") assert add(1,2) == 3 def test_true(self): print("测试test_true") assert 1==1 class TestClassTwo(object): # 测试是否符合预期 def test_addTwo(self): print("测试test_add2") assert add(1,2) == 3 def test_trueTwo(self): print("测试test_true2") assert 1==1 if __name__ =="__main__": pytest.main(["-s","-v"])

以上就是pytest基础用法啦, 参考了 https://www.cnblogs.com/longronglang/p/13843840.html 这个博客。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发真货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • -q 简单打印,只打印测试用例的执行结果
  • -s 详细打印,修改测试函数加上输出。
  • -x 遇到错误时停止测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档