前言

在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. php为什么需要异步编程?php异步编程的详解(附示例)

    本篇文章给大家带来的内容是关于php为什么需要异步编程?php异步编程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我对 php 异步的知识还比较混乱,写这篇是为了 ...

  2. Android中常见的设计模式

    前言: Android开发的设计模式,基本设计思想源于java的设计模式,java的设计模式有N多种,据不完全统计,迄今为止,网络出现最频繁的大概有23种.Java只是一门开发语言,学会并掌握这门语言 ...

  3. 【论文阅读】Deep Clustering for Unsupervised Learning of Visual Features

    文章:Deep Clustering for Unsupervised Learning of Visual Features 作者:Mathilde Caron, Piotr Bojanowski, ...

  4. Java中父类和子类代码执行顺序

    执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 pack ...

  5. oralce迁移Mysql问题总结

    最近从oracle数据库迁移到Mysql, 总结了一些不兼容和需要注意的地方,持久层用的Mybatis 1 guid尽量用代码生成 现象:sys_guid()  mysql报错,mysql对应的为UU ...

  6. shell特殊符号及cut、sort_wc_uniq、tee_tr_split命令 使用介绍

    第6周第2次课(4月24日) 课程内容: 8.10 shell特殊符号cut命令8.11 sort_wc_uniq命令8.12 tee_tr_split命令8.13 shell特殊符号下 扩展1. s ...

  7. ios注册通知NSNotificationCenter(一)

    作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息 [[NSNotificationCenter defaultCenter]  ...

  8. Linux内核设计与实现笔记_1_基本概念

    Linux内核设计与实现笔记_1_基本概念 操作系统 系统这个词包含了操作系统和所有运行在它上面的应用程序.操作系统是指在整个系统中负责完成分最基本功能和系统管理的那些部分,这些部分应该包括: 内核, ...

  9. 第九次作业——DFA最小化,语法分析初步

    老师:MissDu 提交作业 1.将DFA最小化:教材P65 第9题 答: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是 ...

  10. 配置React Native的开发环境

    本文转载自:http://mp.weixin.qq.com/s?__biz=MzIxNjEzNjUzOQ==&mid=402020148&idx=2&sn=ccad14a919 ...