Loading

7.httprunner-pytest风格用例

用例设计原则
  • 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']) #要提取的变量

)

 

 
posted @ 2022-05-09 15:35  木子七  阅读(509)  评论(0编辑  收藏  举报