From: http://www.testclass.net/pytest/test_api_using_params/

背景

接上一节v2ex网站的查看论坛节点信息的api。具体如下:

节点信息

获得指定节点的名字,简介,URL 及头像图片的地址。

https://www.v2ex.com/api/nodes/show.json

Method: GET
Authentication: None
接受参数: name: 节点名(V2EX 的节点名全是半角英文或者数字)
例如: https://www.v2ex.com/api/nodes/show.json?name=python

我们试一下,通过传入不同的name,我们可以获取不同的节点信息。上面例子里我们获取了python讨论区的信息。现在我们把name改成java,该接口会返回java讨论区节点的信息,如下所示

https://www.v2ex.com/api/nodes/show.json?name=python

{
"id" : 63,
"name" : "java",
"url" : "http://www.v2ex.com/go/java",
"title" : "Java",
"title_alternative" : "Java",
"topics" : 1219,
"stars" : 1547, "header" : "The most popular programming language.", "footer" : null, "created" : 1272669207,
"avatar_mini" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_mini.png?m=1509589840",
"avatar_normal" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_normal.png?m=1509589840",
"avatar_large" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_large.png?m=1509589840"
}

那么新的需求来了,现在我们要测试给定的几个节点名称(python/java/go/nodejs),v2ex的节点api可以正确返回节点的名字

需求分析

根据3A原则,我们可以设计如下的用例

代码

v2ex_api_test.py的文件中添加如下内容

import requests
import pytest class TestV2exApiWithParams(object):
domain = 'https://www.v2ex.com/' @pytest.fixture(params=['python', 'java', 'go', 'nodejs'])
def lang(self, request):
return request.param def test_node(self, lang):
path = 'api/nodes/show.json?name=%s' %(lang)
url = self.domain + path
res = requests.get(url).json()
assert res['name'] == lang
assert 0

需要注意的点

  • 每次都可以用request.param来访问本次传入fixture中的参数
  • 在测试方法中传入同名的fixture方法名可以直接访问fixture
  • 使用assert(0)强制用例失败,这样可以看到每次fixture的参数值

运行

$ pytest v2ex_api_test.py
======================================================================== test session starts ========================================================================
platform darwin -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /Users/easonhan/code/testclass.net/src/pytest, inifile:
collected 5 items v2ex_api_test.py .FFFF ============================================================================= FAILURES ==============================================================================
______________________________________________________________ TestV2exApiWithParams.test_node[python] ______________________________________________________________ self = <v2ex_api_test.TestV2exApiWithParams object at 0x105e0edd0>, lang = 'python' def test_node(self, lang):
path = 'api/nodes/show.json?name=%s' %(lang)
url = self.domain + path
res = requests.get(url).json()
assert res['name'] == lang
> assert 0
E assert 0 v2ex_api_test.py:27: AssertionError
_______________________________________________________________ TestV2exApiWithParams.test_node[java] _______________________________________________________________ self = <v2ex_api_test.TestV2exApiWithParams object at 0x1075e2750>, lang = 'java' def test_node(self, lang):
path = 'api/nodes/show.json?name=%s' %(lang)
url = self.domain + path
res = requests.get(url).json()
assert res['name'] == lang
> assert 0
E assert 0 v2ex_api_test.py:27: AssertionError
________________________________________________________________ TestV2exApiWithParams.test_node[go] ________________________________________________________________ self = <v2ex_api_test.TestV2exApiWithParams object at 0x107636190>, lang = 'go' def test_node(self, lang):
path = 'api/nodes/show.json?name=%s' %(lang)
url = self.domain + path
res = requests.get(url).json()
assert res['name'] == lang
> assert 0
E assert 0 v2ex_api_test.py:27: AssertionError
______________________________________________________________ TestV2exApiWithParams.test_node[nodejs] ______________________________________________________________ self = <v2ex_api_test.TestV2exApiWithParams object at 0x1075e2790>, lang = 'nodejs' def test_node(self, lang):
path = 'api/nodes/show.json?name=%s' %(lang)
url = self.domain + path
res = requests.get(url).json()
assert res['name'] == lang
> assert 0
E assert 0 v2ex_api_test.py:27: AssertionError
================================================================ 4 failed, 1 passed in 1.91 seconds =================================================================

用例执行失败,但是每次运行时lang的值我们可以看的很明白。

pytest.9.使用fixture参数化接口入参的更多相关文章

  1. Spring AOP 自定义注解获取http接口及WebService接口入参和出参

    注解方法实现过程中可以采用如下获取方式:—以下为例  HttpServletRequest request = ((ServletRequestAttributes) RequestContextHo ...

  2. springboot项目中接口入参的简单校验

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  3. java接口入参模板化,适用于企业化服务远程调度模板化的场景,接口入参实现高度可配置化

    需求:远程服务接口模板化配置提供接入服务 模板接口分为三个模块:功能路由.参数校验.模板入库 路由:这里的实现方式很简单,就是根据业务标识找到对应的处理方法 参数校验: 参数校验这步涉及模板和校验类两 ...

  4. pytest.10.使用fixture参数化测试预期结果

    From: http://www.testclass.net/pytest/test_api_with_expected_result/ 背景 接上一节v2ex网站的查看论坛节点信息的api. 我们在 ...

  5. (一)将mockjs集成到VUE中后,怎样根据接口入参返回mock结果

    1)安装mockjs,这一步跳过 2)在项目中建立mock模块,笔者的目录结构如下 mock模块与接口模块一一对应,有一个接口,就有一个mock 3)编写登陆模块mock接口,代码如下: import ...

  6. robot:接口入参为图片时如何发送请求

    https://www.cnblogs.com/changyou615/p/8776507.html 接口是上传图片,通过F12抓包获得如下信息 由于使用的是RequestsLibrary,所以先看一 ...

  7. RobotFramework:发现一个大坑,当post接口入参为json时,千万不能用sojson转化后的json串(ride解析会有异常,非sojson工具问题),直接用浏览器粘过来的就行

    问题背景: 和以往一样愉快的进行着自动化测试,突然就不停的提示我,“程序异常”,查看log发现data中的json变为了数组?????? 那算了,我不先组装入参数据直接data=json入参吧,wha ...

  8. pytest框架 里 fixture 参数化的方法

  9. Postman—上个接口返回数据作为下个接口入参

    //将数据解析成json格式 var data=JSON.parse(responseBody); //获取totalRentPrice值 var totalRentPrice=jsonData.da ...

随机推荐

  1. 【leetcode】67-AddBinary

    problem AddBinary code class Solution { public: string addBinary(string a, string b) { string res; ; ...

  2. [LeetCode&Python] Problem 167. Two Sum II - Input array is sorted

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  3. Java中的Arrays类使用详解

    首先先创建一个打印数组的方法,方便后面直接使用 public static void output(int []a) { for(int i=0;i<a.length;i++) { System ...

  4. java-冒泡排序、选择排序、二分查找

    1.冒泡排序 public void bubbleSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { //外循环只需要比较a ...

  5. WINDOWS系统的正确安装-硬盘格式如何选择

    有一种这样的说法,WIN7改装WIN10必须要重新分区,将硬盘格式化为GPT格式(GUID分区表 ), WIN10改装WIN7必须要重新分区,将硬盘格式化为MBR格式. 这种说法一直困扰着我,于是经过 ...

  6. 直面Java 第002期

    . Java和C++同为面向对象语言,Java和C++主要区别有哪些?双方个有哪些优缺点? 解: C++ 被设计成主要用在系统性应用程序设计上的语言,对C语言进行了扩展.对于C语言这个为运行效率设计的 ...

  7. webpack执行命令参数

    在webpack执行命令之后可以添加一些参数,这些参数都有自己的作用,下面是参数列表: $ webpack --config XXX.js //使用另一份配置文件(比如webpack.config2. ...

  8. Scala方法定义,方法和函数的区别,将方法转换成函数

    1. 定义方法和函数 1.1. 定义方法 方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型 1.2. 定义函数 1.3.方法和函数的区别 在函数式编程语言中,函数是 ...

  9. hermes kafka 转http rest api 的broker 工具

    hermes 与nakadi 是类似的工具,但是设计模型有很大的差异,hermes 使用的是webhook的模式(push) nakadi 使用的是pull(event stream),各有自己解决的 ...

  10. code自动补全

    软件安装完成后,第一次一定要使用这种方式创建文件,才会有代码自动提示: https://blog.csdn.net/haibin8473/article/details/79113650 https: ...