前言

在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以借助 HttpRunner 中的辅助函数 debugtalk.py 来完成。

HttpRunner使用文档中的说明:

  • HttpRunner 的实现方式为,支持热加载的插件机制(debugtalk.py),可以在 YAML/JSON 中调用 Python 函数。
  • 具体地做法,我们可以在测试用例文件的同级或其父级目录中创建一个 debugtalk.py 文件,然后在其中定义相关的函数和变量。

本人环境:HttpRunner V1.5.8

测试场景

在之前的文章 HttpRunner学习3--extract提取数据和引用 中,我们模拟的是一个学生充值金币的接口,这个接口有权限验证,我们需要先通过接口A登录,然后在接口B中进行充值操作。

学生金币充值接口:http://doc.nnzhp.cn/index.php?s=/6&page_id=11

在这里,我们可以借助辅助函数,在 debugtalk.py 中写python代码实现登录,并返回后续cookie进行身份验证所需要的信息,最后直接在 YAML 用例脚本中进行引用。

通过Python代码登录获取Cookie

首先,创建一个Python文件,文件名为 debugtalk.py ,我们需要把一个登录函数的代码写到该文件中。在这里,登录函数将直接返回后续充值操作所需要的 cookie ,格式如下:用户名=登录接口返回的sign,debugtalk.py 文件内容如下:

import requests

base_url = "http://api.nnzhp.cn"
def get_cookie(username="test1010", passwd="aA123456"):
url = base_url + "/api/user/login"
headers = {
"Content-Type":"application/x-www-form-urlencoded",
"User-Agent": "Fiddler"
}
body = {
"username": username,
"passwd": passwd
}
res = requests.post(url, headers=headers, data=body)
try:
sign = res.json()["login_info"]["sign"]
except:
sign = ""
cookie = "{}={}".format(username, sign)
return cookie if __name__ == '__main__':
cookie = get_cookie()
print(cookie)

上面的代码中,如果登录失败时,res.json()["login_info"]["sign"] 会提示错误 "KeyError" ,因此用 try...except 进行了简单的异常处理,当登录失败时,返回一个 "" 空字符串。

YAML文件中引用Cookie

在 debugtalk.py 中自定义函数返回数据后,我们要怎么去引用返回的数据呢?

先在 debugtalk.py 同一目录下创建 YAML/JSON 测试用例文件,如在YAML 测试用例中,对 debugtalk.py 中自定义的 get_cookie() 函数进行引用,可使用 ${get_cookie()}

        Cookie: ${get_cookie()}

当然,也可以在引用的时候给函数传参数,如果参数是固定值,则可以这样写 ${get_cookie(test1010, aA123456)},如果参数是变量,则是 ${get_cookie($username, $passwd)} 等。

运行用例

完整的YAML格式用例如下:

- config:
name: debugtalk test
request:
base_url: http://api.nnzhp.cn - test:
name: add gold
request:
url: api/user/gold_add
method: POST
headers:
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
Cookie: ${get_cookie()}
data:
stu_id: 2114
gold: 500
validate:
- eq: [status_code, 200]
- eq: [content.error_code, 0]
- eq: [content.msg, "操作成功!"]

接下来便可以运行用例了,得到后的报告如下:

HttpRunner学习8--使用debugtalk.py辅助函数的更多相关文章

  1. httprunner学习11-辅助函数debugtalk.py

    前言 在httprunner里面,每个 YAML / JSON 文件的脚本都是独立运行的,有时候我们希望能跨文件使用公用的参数. 比如登录生成一个token,后面的用例都可以去引用这个token值,或 ...

  2. httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 具有以下优点: 继承 Requests 的全部特性,轻松实 ...

  3. 一、HttpRunner学习汇总

    HttpRunner是一款面向Http和HTTPS协议的通用测试框架,只需编写维护一份YAML/JSON脚本即可实现自动化测试.性能测试.线上监控.持续集成等多种测试需求,是基于关键字驱动的框架,基于 ...

  4. HttpRunner学习10--hook机制

    前言 对于使用过 Python结合Unittest 框架来做自动化测试的同学,应该知道在 Unittest 中,有这样2个方法:setUp() 和 tearDown() ,即前置和后置操作.通常 se ...

  5. httprunner学习25-文件上传multipart/form-data

    前言 httprunner上传文件接口,其实跟requests上传文件的接口是一样的,之前在python接口系列里面有案例 python接口自动化16-multipart/form-data上传图片 ...

  6. httprunner学习24-sign签名验证

    前言 一般公司对外的接口都会用到sign签名,对不同的客户提供不同的apikey ,这样可以提高接口请求的安全性,避免被人抓包后乱请求. sign签名是一种很常见的方式 关于sign签名的可以参考前面 ...

  7. httprunner学习20-跳过用例skip/skipIf/skipUnless

    前言 在实际工作中,我们有时候会需要对测试用例加判断,比如某个接口功能暂时去掉了,我们希望对这个用例skip不去执行. 当其它的接口依赖于登陆接口返回的token时候,如果登陆都失败了,后面的接口,我 ...

  8. httprunner学习15-运行用例命令行参数详解

    前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, --h ...

  9. httprunner学习14-完整的项目结构设计

    前言 一个完整的接口自动化测试项目到底该如何设计?httprunner框架的知识点其实并不多,前面基本上把一些重要的概念都介绍完了. 本篇就是一个总结性的,可以用于实际工作中设计一个接口自动化测试项目 ...

随机推荐

  1. Spring基于注解的配置1——@Required、@Autowired、@Qualifier示例及与传统注入方法的对比

    @Required注释 作用:用于属性的set方法,那么这个属性必须在xml文件的bean标签里面进行配置,否则就会抛出一个BeanInitializationException异常. 首先准备一个类 ...

  2. 使用node.js开发一个生成逐帧动画小工具

    在实际工作中我们已经下下来不下于一万个npm包了,像我们熟悉的 vue-cli,react-native-cli 等,只需要输入简单的命令 vue init webpack project,即可快速帮 ...

  3. python3 之 变量作用域详解

    作用域: 指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称: L:local,局部作用域,即函数中定义的变量: E: ...

  4. springboot+swagger接口文档企业实践(上)

    目录 1.引言 2.swagger简介 2.1 swagger 介绍 2.2 springfox.swagger与springboot 3. 使用springboot+swagger构建接口文档 3. ...

  5. 设计模式之工厂模式(Factory)

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/53348412 本文出自: [HansChen的博客] 设计模式系列文章: 设计模式之 ...

  6. 程序员的算法课(3)-递归(recursion)算法

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...

  7. 10-kubernetes serveraccount RBAC

    目录 认证安全 serviceAccountName 和 userAccount serviceaccount 创建 使用admin 的SA 测试 URL访问kubernetes资源 APIserve ...

  8. 【合集】python 的一些妙用,推导式、三元表达式、with as 等

    自己常用的内置函数 函数如下: dir len str list tuple zip map reduce(现在并入了functools中) 常用的进制转换 Oct hex bin lambda 表达 ...

  9. python_tornado

    1.创建Tornado服务器    1.创建Application对象        Application是Torando最核心的类        所有关于服务器的配置信息都写在Applicatio ...

  10. PTA 1139 1138 1137 1136

    PAT 1139 1138 1137 1136 一个月不写题,有点生疏..脑子跟不上手速,还可以啦,反正今天很开心. PAT 1139 First Contact 18/30 找个时间再修bug 23 ...