专栏首页用户6517667的专栏单元测试工具(连载11)

单元测试工具(连载11)

4.2 pytest装饰器

pytest的装饰器如表5所示。

表5 pytest的装饰器

装饰器

解释

setup_module/teardown_module

在所有测试用例执行之前和之后执行。

setup_function/teardown_function

在每个测试用例之前和之后执行。

setup_class/teardown_class

在当前测试类的开始与结束执行。

setup/treadown

在每个测试方法开始与结束执行。

setup_method/teardown_method

在每个测试方法开始与结束执行,与setup/treadown级别相同。

4.3 pytest 常用命令行选项

Pytest的强大之处在于它可以通过命令行来对测试用例进行控制,比如案例4使用了-s参数,表示在终端中允许测试运行的时候输出某些结果,包括任何符合标准输出信息。由于程序里面有print语句,所以必须使用-s参数。-v参数可以使输出信息更详细,把main语句改为。

pytest.main(["-sv","test_Calculator.py"])

输出结果变为。

[1m============================= test sessionstarts =============================[0m

platform win32 -- Python 3.7.1, pytest-4.0.2,py-1.7.0, pluggy-0.8.0 -- C:\Python37\pythonw.exe

cachedir: .pytest_cache

rootdir: C:\python\unittest, inifile:

[1mcollecting ... [0m[1m

collected 12 items [0m

test_Calculator.py::TestCalculator::test_base 测试开始

[32mPASSED[0m

test_Calculator.py::TestCalculator::test_max_number[32mPASSED[0m

test_Calculator.py::TestCalculator::test_subs [32mPASSED[0m

test_Calculator.py::TestCalculator::test_mysubs_0 [32mPASSED[0m

test_Calculator.py::TestCalculator::test_mysubs_1 [32mPASSED[0m

test_Calculator.py::TestCalculator::test_mysubs_2 [32mPASSED[0m

test_Calculator.py::TestCalculator::test_multiply [32mPASSED[0m

test_Calculator.py::TestCalculator::test_mymultiply_0[32mPASSED[0m

test_Calculator.py::TestCalculator::test_mymultiply_1[32mPASSED[0m

test_Calculator.py::TestCalculator::test_mymultiply_2[32mPASSED[0m

test_Calculator.py::TestCalculator::test_mymultiply_3[32mPASSED[0m

test_Calculator.py::TestCalculator::test_divide 除数不能为零

[32mPASSED[0m测试结束

[32m[1m========================== 12 passed in0.63 seconds ==========================[0m

明显清晰了很多。对于命令行参数可以通过下面语句获得,在这里不做更多介绍。

C:\Users\Jerry>pytest --help

4.4 pytest 运行并发测试

要让pytest实现并发测试,必须先安装pytest-parallel。

pip install pytest-parallel

另外要注意这个插件仅仅支持python3.6版本及以上,而且如果想多进程并发,就必须跑在Unix或者Mac机器上,Windows环境仅仅支持多线程运行。运行时需要指定以下参数。

lworkers (optional) X。 多进程运行, X是进程数。 默认值1。

ltests-per-worker (optional) X. 多线程运行, X是每个worker运行的最大并发线程数。 默认值1。

案例9:用pytest框架实现并发测试。

#coding=utf-8

import pytest

@pytest.mark.release

class TestClass1(object):

def test_one(self):

x = "this"

assert 'h' in x

def test_two(self):

x = "hello"

assert hasattr(x,'check')

class TestClass2(object):

def test_one(self):

x = "this"

assert 'h' in x

def test_two(self):

x = "hello"

assert hasattr(x,'check')#判断x对象中是否存在name属性'check'

#terminal里输入 pytest TesterTalk.py --workers 2 #指定2个进程并发

#terminal里输入 pytest TesterTalk.py --workers 2 --test-per-worker 3 #指定2个进程并发,每个进程最多运行3个线程。

if __name__ == '__main__':

pytest.main('-sv --workers2 TesterTalk.py')

4.5 配合allure生成pytest 测试报告

pytest可以通过allure生成很漂亮的测试报告,在Windows下配置如下。

l配置Java环境(运行allure 需要)

l安装powershell(Windows 10自带)

l在powershell中输入 Set-ExecutionPolicy RemoteSigned-scope CurrentUser

l安装scoop方法:运行 powershell 输入 , iex (new-objectnet.webclient).downloadstring('https://get.scoop.sh') 然后根据提示安装即可

l安装allure :scoop install allure

l生成报告:allure serve 测试的xml路径

lallure open -h 127.0.0.1 -p 8083 .\report\report\

为了方便期间,可以在测试用例同目录建立文件report.bat,内容如下。

allure serve .\report\xml\

allure open -h 127.0.0.1 -p 8083 .\report\report\

1. Features定制

案例10:配合allure生成pytest 测试报告之Features定制。

# -*- coding: utf-8 -*-

import allure

import pytest

from Calculator import calculator

from Util import util

@allure.feature('test_module_01')

@allure.story('test_story_01')

def test_case_01():

j=calculator(4,2)

util.AssertEqual(j.myadd(),6)

util.AssertEqual(j.mysubs(),2)

util.AssertEqual(j.mymultiply(),8)

util.AssertEqual(j.mydivide(),2)

@allure.feature('test_module_01')

@allure.story('test_story_02')

def test_case_02():

j=calculator(9223372036854775808,9223372036854775808)

util.AssertEqual(j.mymultiply(),85070591730234615865843651857942052864)

if __name__ == '__main__':

pytest.main(['-s', '-q', '--alluredir', './report/xml'])

测试报告如图31所示。

图31 配合allure生成pytest 测试报告之Features定制

Title和Desc定制

案例11:配合allure生成pytest 测试报告之Title和Desc定制。

# -*- coding: utf-8 -*-

import allure

import pytest

from Calculator import calculator

from Util import util

@allure.feature('test_module_01')

@allure.story('test_story_01')

#test_case_01为用例title

deftest_case_01():

"""

用例描述:这是用例描述,Test case 01,描述本人

"""

#注释为用例描述

j=calculator(9223372036854775808,9223372036854775808)

util.AssertEqual(j.mymultiply(),85070591730234615865843651857942052864)

if __name__ == '__main__':

pytest.main(['-sv', '-q', '--alluredir', './report/xml'])

测试报告如图32所示。

图32 配合allure生成pytest 测试报告之Title和Desc定制

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文分享自微信公众号 - 软件测试培训(iTestTrain),作者:顾翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 单元测试工具(连载13)

    Pytest可以通过fixtures、Mark_Usefixtures和外部数据对测试用例进行参数化。

    小老鼠
  • 在Android Studio环境下建立UiAutomator环境

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • C++语言的单元测试与代码覆盖率

    直接交付没有经过测试的代码是不太好的,因为这很可能会浪费整个团队的时间,在一些原本早期就可以发现的问题上。而单元测试,就是发现问题一个很重要的环节。

    小老鼠
  • Python测试应用与工具

    Python测试应用与公具 今天跟大家分享一个Python与测试相关的话题,主要介绍Python中的标准库 unittest及第三方测试工具pytest及m...

    1846122963
  • Pytest系列(18)- 超美测试报告插件之allure-pytest的基础使用

    https://www.cnblogs.com/poloyy/category/1690628.html

    小菠萝测试笔记
  • Pytest自定义标记mark及指定文件/类/方法/用例执行

    pytest.main(['-s','test01.py','-m=test'])

    橙子探索测试
  • Pytest配置文件pytest.ini

    pytest.ini文件是pytest的主配置文件,可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行...

    橙子探索测试
  • 聊聊 Python 的单元测试框架(三):pytest

    本篇文章是《聊聊 Python 的单元测试框架》的第三篇,前两篇分别介绍了标准库 unittest 和第三方单元测试框架 nose。作为本系列的最后一篇,压轴出...

    Python猫
  • Pytest跳过执行之@pytest.mark.skip()详解

    在我们自动化测试过程中,经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了,这时我们就可以用到跳过skip用例,如果我们注释...

    橙子探索测试
  • 走近STL -- 你好,List

    从实现层面看,相较于Vector的线性空间,List的实现要复杂的多。 List的优势在于每次插入或删除一个元素,就分配或释放一个位置。因此,List对于空间...

    看、未来

扫码关注云+社区

领取腾讯云代金券