httprunner icon indicating copy to clipboard operation
httprunner copied to clipboard

变量中间包含$符号的问题

Open hazer491 opened this issue 6 years ago • 4 comments

问题描述

比如我有一个全局的变量, 它的值形如 a$b, runner.run(suite_path,mapping=mapping) 生成的mapping文件中含有a$b, 那么run就会报变量b找不到的错误。 说明:改成a$$b并不能解决问题,但是改成$$报错的时刻会不一样: 如果是a$b, 在parser mapping文件的时候就会报错。 改成a$$b, parser mapping文件的时候会按期望处理成a$b,但是在run case之前,还会parser一次case的信息, 这个时候由于a$$b已经变成a$b,再处理就会报错了。

版本信息

  • 操作系统类型: [ Windows]
  • Python 版本 [3.6]
  • HttpRunner 版本 [2.2.6]

hazer491 avatar Oct 18 '19 02:10 hazer491

@shi053051 可否提供下报错的用例和堆栈日志?

debugtalk avatar Oct 26 '19 15:10 debugtalk

@debugtalk 重现步骤: case file: [ { "config": { "name": "test", "variables": { }, "base_url": "http://www.baidu.com" } }, { "test": { "name": "step 1", "variables": { }, "validate": [ ], "request": { "url": "/", "method": "GET", "headers": {}, "verify": false } } } ]

config (csv): Env,URL,UserName,Password test,http://www.baidu.com,a$b,aaa

cli.py: from httprunner.api import HttpRunner import argparse import os import csv

currert_path = '.' Config_PATH = os.path.join(currert_path, 'config.csv')

def get_env_info(env = 'test'): try: with open(Config_PATH, newline='') as envFile: reader = csv.DictReader(envFile) for row in reader: if row['Env'] == env: return row except: print('get env info failed :%s' % Exception) parser = argparse.ArgumentParser() parser.add_argument("--env", default='test', help="specify the api running environment.") args = parser.parse_args() env = args.env

mapping = get_env_info(env) runner = HttpRunner(log_level='Debug') runner.run('testCase',mapping=mapping)

运行cli.py的报错信息: Traceback (most recent call last): File "C:/Users//BT/tools/Python3/test_httprunner/cli.py", line 25, in runner.run('testCase',mapping=mapping) File "C:\Users*\Python37\lib\site-packages\httprunner\api.py", line 278, in run return self.run_path(path_or_tests, dot_env_path, mapping) File "C:\Users*\Python37\lib\site-packages\httprunner\api.py", line 266, in run_path return self.run_tests(tests_mapping) File "C:\Users*\Python37\lib\site-packages\httprunner\api.py", line 184, in run_tests parsed_testcases = parser.parse_tests(tests_mapping) File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 1259, in parse_tests parsed_testcase = _parse_testcase(testcase, project_mapping) File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 1043, in _parse_testcase session_variables_set File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 899, in __prepare_config prepared_config = prepare_lazy_data(config, functions, check_variables_set, cached=True) File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 587, in prepare_lazy_data cached File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 587, in prepare_lazy_data cached File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 604, in prepare_lazy_data content = LazyString(content, functions_mapping, check_variables_set, cached) File "C:\Users*\Python37\lib\site-packages\httprunner\parser.py", line 442, in init self.__parse(raw_string) File "C:\Users**\Python37\lib\site-packages\httprunner\parser.py", line 504, in __parse raise exceptions.VariableNotFound(var_name) httprunner.exceptions.VariableNotFound: b

说明: 改成a$$b,还是会报一样错, 只是traceback信息会有些不同。

hazer491 avatar Oct 28 '19 05:10 hazer491

今天也遇到了这个问题,看了下源码,发现httprunner默认将含$的字符串(如$b),识别为调用变量b,暂时的办法是不在变量值里包含$.

xwmyth8023 avatar Oct 28 '19 08:10 xwmyth8023

不在变量值里包含$. 是把$直接去掉了吗

harveyxiao avatar May 09 '23 03:05 harveyxiao