7.httprunner-pytest风格用例
阅读原文时间:2023年07月08日阅读:1

用例设计原则

  • py文件名以test_开头或者_test结尾
  • 函数名以test_开头
  • 类名以Test开头,并且不能有init初始化方法
  • 所有的包pakege必须有_init_.py文件

pycharm设置pytest 运行

settings → Tools → Python Integrated Tools → Testing / 将 default test runner 设置为pytest

pytest用例-Config类

config类的方法

base_url:base_url 指定
variables:全局变量指定
export:指定导出的测试用例会话变量暴露出来设为全局变量

pytest用例导包

#导包
from httprunner import HttpRunner # httprunner类,测试基类
from httprunner import Config #config类
from httprunner import Step # 用例步骤
from httprunner import RunRequest #请求
from httprunner import RunTestCase # 引入测试用例

HttpRunner类

#httprunner类源码部分
class HttpRunner(object):
config: Config
teststeps: List[Step]

'''
httprunner类的属性config 指向了 Config类,teststeps指向了list里面的Setp
'''

#config类源码
class Config(object):
def __init__(self, name: Text):
self.__name = name # 初始化name变量,传入用例名称
self.__variables = {} # 全局变量
self.__base_url = "" #base_url
self.__verify = False #https证书开关
self.__export = [] #全局变量提取
self.__weight = 1

    caller\_frame = inspect.stack()\[1\]  
    self.\_\_path = caller\_frame.filename

'''
以上初始化变量,除了name是直接传入
其余变量在源码中下方都有对应的同名的函数处理,所有我们用Config类的时候
Config是链式调用,类传入用例名称,其余的直接调用对应方法
'''

pytest用例编写

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

继承Httprunner类

class TestLogin(HttpRunner):
config = (Config('登录用例') # 用例名称
.base_url('https://xxx-xxx.com') # 域名地址
.verify(False) # https验证开关
.variables(**{'user': 'test', 'pwd': 123456}) # 全局变量
.export('token') # 将token设置为全局变量
)
# 测试步骤,是一个list,里面可以有多个步骤用例
teststeps = [
Step( # 每一个step,代表一个用例

        # RunRequest类用来发送请求  
        RunRequest('step-login') # 步骤名称  
            .post('/')  # 请求方式 / 接口地址  
            .with\_data({'username': '$user', 'password': '$pwd'})  # 请求参数  
            # 返回值提取  
            .extract()  
            # 返回值使用jmespath表达式提取: 表达式,变量名  
            .with\_jmespath('body.token', 'token')

            # 断言  
            .validate()  
            .assert\_equal('body.code', 0, message='code不正确')  
    )  
\]

RunRequest(测试步骤)

#get请求
.with_params(**{'page':1,'size':2})

#post请求 Content-Type:application/x-www-form-urlencoded
.with_data({'page':1,'size':2})
#post请求 Content-Type:application/json
.with_json({'page':1,'size':2})

RunTestCase导入用例

from .publish_test import TestCasePublish # 导入要引入的用例类

#在步骤中引入
Step(
RunTestCase("step-登录")
.call(TestCasePublishstatus) # 导入用例类
.export(*['uid']) #要提取的变量

)