HttpRunner httprunner3 怎样对 $ 进行转义呢?

stone9159 · 2021年12月09日 · 最后由 stone9159 回复于 2021年12月09日 · 3292 次阅读

测试用户删除接口时,需要使用执行 sql 语句初始化,创建专门用来创建测试接口的用户,新建用户中的密码是需要加密的,加密后基本都有 $ 符号:

'insert into rdb_server_jdbc_db.users values(100,"user_for_test_delete_api","$2a$15$QeuSCLP8s8r5xMJsW9xcGe8f7EeI7YJCrWlLlabbYWX2R7VBFwwXy",1,"user_for_test_delete_api","user@example.com","2021-11-30 01:56:40","2021-11-30 01:56:40");',

但是在 httprunner3 中,$2a$15$QeuSCLP8s8r5xMJsW9xcGe8f7EeI7YJCrWlLlabbYWX2R7VBFwwXy 被解析为 3 个变量,导致报错:
raise exceptions.VariableNotFound(not_defined_variables)
E httprunner.exceptions.VariableNotFound: ['QeuSCLP8s8r5xMJsW9xcGe8f7EeI7YJCrWlLlabbYWX2R7VBFwwXy', '2a', '15']

使用了\,$$ 进行转移,仍然要报错,请问大家有什么解决办法呢

共收到 7 条回复 时间 点赞

-3.x 的不知道,以前改 1.X 的源码的时候是加了 ${{{var}}} => $var 这样处理了一下来保持原文, 如果你的用例还不多可以把它变量 $var 识别的正则改成 ${var}, 这样遇到的少点,我是已经有很多用例了,就这样搞了

-如果改不动源码,仅这个场景 sql 用 replace 函数处理下应该也可以解决, passwd ###123### => replace('###123###', '###', '$')

-没试过
insert into rdb_server_jdbc_db.users values(100,"user_for_test_delete_api", replace('###2a###15###QeuSCLP8s8r5xMJsW9xcGe8f7EeI7YJCrWlLlabbYWX2R7VBFwwXy', '###', '$')",1,"user_for_test_delete_api","user@example.com","2021-11-30 01:56:40","2021-11-30 01:56:40");

你的脚本是咋写的,如果是在 debugtalk.py 里执行 sql 语句应该没有这个问题,你试试?

把"$"替换成 “%24”

4楼 已删除


$$ 也不行吗,那只能 debug 一下了

我去催饭 回复

这样密码里面 $ 都变成了%24

我去催饭 回复

开始时,但是我每个用例都需要执行不同的 sql,所以将 debugtalk.py 里面执行 sql 的方法改为根据用例传的 sql 执行

北溟 回复

非常感谢,用你的方法解决的,但是最好不用 ###,因为 python 中 # 会注释代码
不知道是不是 httprunner 字符解析方法的问题,replace 函数中 $ 用 $$ 可以转义为 $ 进行替换,但是密码中使用 $$ 进行转移就会失败,
${{{var}}} => $var 这个 我试了 ${{{var}}} =>${{{var}}}

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册