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

背景

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

  1. 节点信息
  2. 获得指定节点的名字,简介,URL 及头像图片的地址。
  3. https://www.v2ex.com/api/nodes/show.json
  4. Method: GET
  5. Authentication: None
  6. 接受参数:
  7. name: 节点名(V2EX 的节点名全是半角英文或者数字)
  8. 例如:
  9. https://www.v2ex.com/api/nodes/show.json?name=python

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

  1. https://www.v2ex.com/api/nodes/show.json?name=python
  2. {
  3. "id" : 63,
  4. "name" : "java",
  5. "url" : "http://www.v2ex.com/go/java",
  6. "title" : "Java",
  7. "title_alternative" : "Java",
  8. "topics" : 1219,
  9. "stars" : 1547,
  10. "header" : "The most popular programming language.",
  11. "footer" : null,
  12. "created" : 1272669207,
  13. "avatar_mini" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_mini.png?m=1509589840",
  14. "avatar_normal" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_normal.png?m=1509589840",
  15. "avatar_large" : "//v2ex.assets.uxengine.net/navatar/03af/dbd6/63_large.png?m=1509589840"
  16. }

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

需求分析

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

代码

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

  1. import requests
  2. import pytest
  3. class TestV2exApiWithParams(object):
  4. domain = 'https://www.v2ex.com/'
  5. @pytest.fixture(params=['python', 'java', 'go', 'nodejs'])
  6. def lang(self, request):
  7. return request.param
  8. def test_node(self, lang):
  9. path = 'api/nodes/show.json?name=%s' %(lang)
  10. url = self.domain + path
  11. res = requests.get(url).json()
  12. assert res['name'] == lang
  13. assert 0

需要注意的点

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

运行

  1. $ pytest v2ex_api_test.py
  2. ======================================================================== test session starts ========================================================================
  3. platform darwin -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
  4. rootdir: /Users/easonhan/code/testclass.net/src/pytest, inifile:
  5. collected 5 items
  6. v2ex_api_test.py .FFFF
  7. ============================================================================= FAILURES ==============================================================================
  8. ______________________________________________________________ TestV2exApiWithParams.test_node[python] ______________________________________________________________
  9. self = <v2ex_api_test.TestV2exApiWithParams object at 0x105e0edd0>, lang = 'python'
  10. def test_node(self, lang):
  11. path = 'api/nodes/show.json?name=%s' %(lang)
  12. url = self.domain + path
  13. res = requests.get(url).json()
  14. assert res['name'] == lang
  15. > assert 0
  16. E assert 0
  17. v2ex_api_test.py:27: AssertionError
  18. _______________________________________________________________ TestV2exApiWithParams.test_node[java] _______________________________________________________________
  19. self = <v2ex_api_test.TestV2exApiWithParams object at 0x1075e2750>, lang = 'java'
  20. def test_node(self, lang):
  21. path = 'api/nodes/show.json?name=%s' %(lang)
  22. url = self.domain + path
  23. res = requests.get(url).json()
  24. assert res['name'] == lang
  25. > assert 0
  26. E assert 0
  27. v2ex_api_test.py:27: AssertionError
  28. ________________________________________________________________ TestV2exApiWithParams.test_node[go] ________________________________________________________________
  29. self = <v2ex_api_test.TestV2exApiWithParams object at 0x107636190>, lang = 'go'
  30. def test_node(self, lang):
  31. path = 'api/nodes/show.json?name=%s' %(lang)
  32. url = self.domain + path
  33. res = requests.get(url).json()
  34. assert res['name'] == lang
  35. > assert 0
  36. E assert 0
  37. v2ex_api_test.py:27: AssertionError
  38. ______________________________________________________________ TestV2exApiWithParams.test_node[nodejs] ______________________________________________________________
  39. self = <v2ex_api_test.TestV2exApiWithParams object at 0x1075e2790>, lang = 'nodejs'
  40. def test_node(self, lang):
  41. path = 'api/nodes/show.json?name=%s' %(lang)
  42. url = self.domain + path
  43. res = requests.get(url).json()
  44. assert res['name'] == lang
  45. > assert 0
  46. E assert 0
  47. v2ex_api_test.py:27: AssertionError
  48. ================================================================ 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. Wifi设备接入流程

    这是硬件平台下文档结构图,详细了解戳这里具体了解这里. 什么意思呢?要想实现控制wifi设备,基本流程是: 咱自己的wifi设备----------自己的服务器(指图中的厂商服务器)-------微信 ...

  2. c++输入输出流加速器

      发现同样是cin,cout,其他大佬(orz)的耗时短很多.看了他们的代码,我发现他们加了一个很神奇的匿名函数(Lambda捕获)提高了cin,cout效率,因此去百度了解了一下.以下是大佬所使用 ...

  3. 实验吧—Web——WP之 因缺思汀的绕过

    首先打开解题链接查看源码: 查看源码后发现有一段注释: <!--source: source.txt-->这点的意思是:原来的程序员在写网页时给自己的一个提醒是源码在这个地方,我们要查看时 ...

  4. Python基础练习及答案

    1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=['alex', 'eric', 'rain'] 该题目主要是考的字符串的拼接,join方法, s = "" li ...

  5. python------模块定义、导入、优化 ------->hashlib模块

    一.hashlib模块 用于加密相关的操作,3.x版本里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法. (MD5消息摘要算法(英语 ...

  6. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)

    https://www.cnblogs.com/mq0036/p/4155136.html 我们经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个tabl ...

  7. LeetCode – Number of Islands

    Given a -d grid map of 's (water), count the number of islands. An island is surrounded by water and ...

  8. BZOJ1494 [NOI2007]生成树计数

    题意 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  autoint Logout 捐赠本站 Probl ...

  9. mongodb备份与还原

    mongodb单机: 备份所有的库: mongodump --host 10.10.7.33:27019 --gzip --out /home/mongodb/0415_bf 备份指定的库: mong ...

  10. 使用python比较两个文件的不同之处

    比较两个文件的不同之处用处还是比较大的,特别是比较两个版本的不同之处 [root@localhost python]# cat diftest.py #!/usr/bin/python import ...