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

前言

在httprunner里面,每个 YAML / JSON 文件的脚本都是独立运行的,有时候我们希望能跨文件使用公用的参数。
比如登录生成一个token,后面的用例都可以去引用这个token值,或者有些复杂的逻辑,需要写个函数去实现,比如操作数据库,加密解密等。
httprunner中可以使用 debugtalk.py 写辅助函数,实现复杂的功能。

登录函数获取token

新建一个debugtalk.py文件,写个登录函数,返回token值

import requests

host = "http://127.0.0.1:8000/"

def token(user="test", psw="123456"):
    '''
    登录获取token         # # 上海悠悠,QQ交流群:750815713
    :param user: 用户名
    :param psw: 密码
    :return: token
    '''
    login_url = host+"api/v1/login/"
    headers = {
        "Content-Type": "application/json"
    }
    body = {
        "username": user,
        "password": psw
    }
    r = requests.post(login_url, headers=headers, json=body)
    try:
        return_token = r.json()["token"]
    except:
        print("大兄弟,返回的不是标准json格式,或者没取到token, 别问我为什么报错, 因为返回内容:\n %s" % r.text)
        return_token = ''
    return return_token

if __name__ == "__main__":
    print("获取到token值:%s" % token())

运行结果:

获取到token值:e388bfc10ca99135d1d58c00a1091311a0f0d48c

引用token

debugtalk.py 同一目录下新建一个 test_info_demo.yml 文件,引用 debugtalk.py 里面的函数使用${token()}

- config:
    name: logincase
    variables: {}

# 上海悠悠,QQ交流群:750815713
- test:
    name: get user info case1
    request:
        url: http://127.0.0.1:8000/api/v1/user/info/
        method: GET
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
            Authorization: Token ${token()}         # 引用token
    validate:
        - eq: [status_code, 200]
        - eq: [headers.Content-Type, application/json]
        - eq: [content.0.age, 20]
        - eq: [content.0.name, yoyo]
        - eq: [content.0.mail, 283340479@qq.com]

给函数传参数,可以使用 ${token(test1, 123456)} 或者传变量 ${token($user, $psw)}

运行用例

hrun test_info_demo.yml

D:\soft\projectdemo>hrun test_info_demo.yml
get user info case1
INFO     GET http://127.0.0.1:8000/api/v1/user/info/
INFO     status_code: 200, response_time(ms): 199.26 ms, response_length: 190 bytes
INFO     start to validate.
.

----------------------------------------------------------------------
Ran 1 test in 0.653s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\projectdemo\reports\1569424911.html

转载于:https://www.cnblogs.com/yoyoketang/p/11588363.html

pycharm中运行测试出现以下问题:..\..\..\.venv\lib\site-packages\httprunner\runner.py:210 (TestgriBySupplierCompany.test_start) def load_debugtalk_functions() -> Dict[Text, Callable]: """load project debugtalk.py module functions debugtalk.py should be located in project root directory. Returns: dict: debugtalk module functions mapping { "func1_name": func1, "func2_name": func2 } """ # load debugtalk.py module try: > imported_module = importlib.import_module("debugtalk") ..\..\..\.venv\lib\site-packages\httprunner\loader.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ C:\Users\JY-JYZC400\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py:127: in import_module return _bootstrap._gcd_import(name[level:], package, level) ..\..\..\debugtalk.py:44: in <module> from before.pre import * ..\..\..\before\pre.py:24: in <module> from utils.db.producer import KafkaClient ..\..\..\utils\db\producer.py:8: in <module> from kafka import KafkaProducer ..\..\..\.venv\lib\site-packages\kafka\__init__.py:23: in <module> from kafka.producer import KafkaProducer _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ from __future__ import absolute_import from .kafka import KafkaProducer > from .simple import SimpleProducer E File "D:\Workspace\02_project\apitest_sc_inventory\.venv\lib\site-packages\kafka\producer\simple.py", line 54 E return '<SimpleProducer batch=%s>' % self.async E ^ E SyntaxError: invalid syntax ..\..\..\.venv\lib\site-packages\kafka\producer\__init__.py:4: SyntaxError During handling of the above exception, another exception occurred: self = <apitest_sc_inventory.testcases.scpl_idspmanagerserv.supplier_companyInventory.query_list_griBySupplierCompany_test.TestgriBySupplierCompany object at 0x076FB3D0> param = None def test_start(self, param: Dict = None) -> "SessionRunner": """main entrance, discovered by pytest""" ga4_client.send_event("test_start") print("\n") > self.__init() ..\..\..\.venv\lib\site-packages\httprunner\runner.py:215: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ..\..\..\.venv\lib\site-packages\httprunner\runner.py:63: in __init self.__project_meta = self.__project_meta or load_project_meta( ..\..\..\.venv\lib\site-packages\httprunner\loader.py:403: in load_project_meta debugtalk_functions = load_debugtalk_functions() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def load_debugtalk_functions() -> Dict[Text, Callable]: """load project debugtalk.py module functions debugtalk.py should be located in project root directory. Returns: dict: debugtalk module functions mapping { "func1_name": func1, "func2_name": func2 } """ # load debugtalk.py module try: imported_module = importlib.import_module("debugtalk") except Exception as ex: logger.error(f"error occurred in debugtalk.py: {ex}") > sys.exit(1) E SystemExit: 1 ..\..\..\.venv\lib\site-packages\httprunner\loader.py:356: SystemExit Process finished with exit code 1
最新发布
08-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值