此贴是为了记录本人在使用HttpRunner过程中遇到的问题以及如何解决。顺便做个记录。
因为没时间去看视频,只能看着CSDN各种教程去使用HttpRunner框架了,过程中各种曲折,遇到了各种各样的问题。建议大家可以先看完课程里的视频再去使用这个框架,起码会比我少遇到一些问题。
此贴会持续更新
当前使用版本:HttpRunner3.1.4
问题:敲 httprunner --version
的时候,报一下错误
ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’ (D:\Anaconda\envs\vt_api_test\lib\site-packages\markupsafe_init_.py)
明明装了 markupsafe 这个模块了。为什么还会报错呢?
(vt_api_test) E:\code\vt_api_frame>pip install markupsafe
Requirement already satisfied: markupsafe in d:\anaconda\envs\vt_api_test\lib\site-packages (2.1.1)
当前这个markupsafe包的版本是2.1.1版本。
解决方法:尝试下指定版本安装一下。比如安装低版本试试。
比如:pip install markupsafe==2.0.1
问题一:参数化入参和返回值的数据类型不同问题。
读取CSV文件,参数化入参 → str 类型
但是接口返回值 → int 类型
使用 -eq
是一直失败的。因为str
和int
类型比较就是错误了。只能直接将比较关键字- eq
改为- str_eq
修改前:断言错误。返回值是int类型。期待值是str类型。
assert status_code equal 200(str) ==> fail
check_item: status_code
check_value: 200(int)
assert_method: equal
expect_value: 200(str)
assert body.code equal 0(str) ==> fail
check_item: body.code
check_value: 0(int)
assert_method: equal
expect_value: 0(str)
assert body.msg equal ok(str) ==> pass
assert body.data.brs.data.baseBookId equal 173071(str) ==> fail
check_item: body.data.brs.data.baseBookId
check_value: 173071(int)
assert_method: equal
expect_value: 173071(str)
assert body.data.brs.data.page.bookId equal 305408(str) ==> fail
check_item: body.data.brs.data.page.bookId
check_value: 305408(int)
assert_method: equal
expect_value: 305408(str)
修改后:统一转为str再比较。
assert status_code string_equals 200(str) ==> pass
assert body.code string_equals 0(str) ==> pass
assert body.msg equal ok(str) ==> pass
assert body.data.brs.data.baseBookId string_equals 173071(str) ==> pass
assert body.data.brs.data.page.bookId string_equals 305408(str) ==> pass
问题二:如何将上个登录接口的返回token,传给下个接口当做请求参数?
config:
name: FSL Login - Get token
variables:
license: ${ENV(FSLLcs)}
appCode: ${ENV(FSLappCode)}
base_url: ${ENV(dev_client_url)}
# 一般在提取变量后,需在 config 中 export 导出变量。导出变量的目的是,使他变成全局变量,
# 方便后面步骤调用(在一个yml用例引用另外一个yml用例的时候用得到)
export:
- token
teststeps:
-
name: step1 login - get token
request:
method: GET
url: /api-client/login/license
params:
license: $license
appCode: $appCode
extract: # 提取变量
- token: body.data.token
- openId: body.data.openId
validate:
- eq: ["status_code", 200]
- eq: ["body.code", 0]
- eq: ["body.msg", ok]
- eq: ["body.data.expire", 5400]
问题三:生成的log文件,里面中文显示乱码问题。
当前HttpRunner版本为 3.1.4
修改一下httprunner源码。给日志器添加encoding
在pychamr里按ctrl+shift+R
然后输入logger.add
找到对应的函数,在函数里添加上encoding="utf-8"
即可。