前言

  之前一篇文章简单介绍了 pytest 以及 pytest.fixture 装饰器 :https://www.cnblogs.com/shenh/p/11572657.html 。实际在写自动化测试脚本中,还会有一些很实用的方法,下文就来讲述下这些用法。

一.pytest.mark.parametrize 装饰器

pytest 内置装饰器 @pytest.mark.parametrize 可以让测试数据参数化,把测试数据单独管理,类似 ddt 数据驱动的作用,方便代码和测试数据分离。

1.一次传多个参数

import pytest

@pytest.mark.parametrize('x,y',[(1,2),(3,4)])
def test_sum(x,y):
sum = x + y
print(sum) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
3
.
7
. ============================== 2 passed in 0.06s ==============================

2.组合传参:

注意:这种方式一共传递了4组参数  (1,3)、(1,4)、(2,3)、(2,4)。这种方式可以简化测试数据,不用手动再将参数组合。

import pytest

@pytest.mark.parametrize('x',[1,2])
@pytest.mark.parametrize('y',[3,4])
def test_sum(x,y):
sum = x + y
print(sum) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
4
.
5
.
5
.
6
. ============================== 4 passed in 0.14s ==============================

二、fixture返回值

1.获取被调用函数返回值

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f' return accesstoken def test_sum(login):
token = login
print(token) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
197ce8083c38467f
. ============================== 1 passed in 0.04s ==============================

若被调用函数返回多个参数:

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f'
customerguid = '096799f5-e040-11e9-8c01-0242ac11000d' return accesstoken,customerguid def test_sum(login):
token = login[0]
guid = login[1]
print(token)
print(guid) if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
. ============================== 1 passed in 0.07s ==============================

2.单个用例调用多个函数

import pytest

@pytest.fixture(scope='function')
def login():
print('登录') @pytest.fixture(scope='function')
def conn():
print('连接数据库') def test_1(login,conn):
print('测试用例1') def test_2():
print('测试用例2') if __name__ =="__main__":
pytest.main(['test_sample.py','-s'])

执行结果:

test_sample.py
登录
连接数据库
测试用例1
.
测试用例2
. ============================== 2 passed in 0.05s ==============================

三、测试用例分类

有时候我们只需执行部分测试用例,比如从用例集当中挑选 smoke 测试,要怎么做呢?通过装饰器 @pytest.mark.smoke,smoke 是可以自定义的,运行时加上命令‘-m=smoke’,pytest 就会挑选带有装饰器的类或函数运行。

import pytest

@pytest.fixture(scope='function')
def login():
accesstoken = '197ce8083c38467f'
customerguid = '096799f5-e040-11e9-8c01-0242ac11000d' return accesstoken,customerguid @pytest.mark.smoke
def test_sum(login):
token = login[0]
guid = login[1]
print(token)
print(guid) def test_2():
print('测试用例') if __name__ =="__main__":
pytest.main(['test_sample.py','-s','-m=smoke'])

执行结果:

test_sample.py
197ce8083c38467f
096799f5-e040-11e9-8c01-0242ac11000d
. ======================= 1 passed, 1 deselected in 0.02s =======================

pytest 常见用法的更多相关文章

  1. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  2. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  5. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  6. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. [转]EasyUI——常见用法总结

    原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...

  8. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...

  9. [转]Linux中find常见用法示例

    Linux中find常见用法示例[转]·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;find命令的参 ...

随机推荐

  1. electron应用生成exe程序并打包过程记录

    1.写好应用程序后,安装 electron-packager 在 package.json 文件中加入配置项目 "scripts": { "build": &q ...

  2. vue 仿微信朋友圈9张图上传功能

    项目需求要求用户上传商品的时候可以一次性上传9张图,多余9张提示‘只能上传9张图’,并且每张图右上角有个删除按钮,图片也可以点击放大. 出来的效果图如下: 话不多说,上代码: <el-form- ...

  3. Bag of Tricks for Image Classification with Convolutional Neural Networks

    url: https://arxiv.org/abs/1812.01187 year: 2018 文中介绍了训练网络的一些 tricks, 通过组合训练过程的trick,来提高模型性能和泛化能力,以及 ...

  4. Spring Cloud Gateway-自定义异常处理

    前提 我们平时在用SpringMVC的时候,只要是经过DispatcherServlet处理的请求,可以通过@ControllerAdvice和@ExceptionHandler自定义不同类型异常的处 ...

  5. CSS语法规范一

    CSS语法规范 CSS规则由两个主要的部分构成:选择器以及一条或多条声明. p{ color: red; font-size: 12px; } CSS代码风格 样式格式书写 紧凑格式 h3 {colo ...

  6. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  7. IDEA下新建Vue项目

    1.首先需要安装nodeJS,并配置全局环境变量. 2.在IDEA中新建一个空的project 3.在setting中配置JavaScript的语言版本为6 在file types的html中添加.* ...

  8. 微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)

    0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...

  9. 一个java的http请求的封装工具类

    java实现http请求的方法常用有两种,一种则是通过java自带的标准类HttpURLConnection去实现,另一种是通过apache的httpclient去实现.本文用httpclient去实 ...

  10. JVM运行机制(非原创)

    文章大纲 JVM基本概念 JVM的体系结构 JVM启动流程 一.JVM基本概念 Java虚拟机(JVM)是可运行Java代码的假想计算机 Java虚拟机包括类加载器.一组寄存器.方法区.一个垃圾回收堆 ...