10步玩转httprunner框架

一、安装说明

python3.6安装:参考安装教程

httprunner安装:

pip install selenium

pip install pyOpenSSL

pip install pymysql

pip install httprunner==2.0.2

运行如下命令,若正常显示版本号,则说明 HttpRunner 安装成功:

参考:

            #卸载httprunner命令:

 pip uninstall httprunner

二、基础概念

1、测试用例(testcase)

HttpRunner 的测试用例描述方式进行如下设计:

测试用例应该是完整且独立的,每条测试用例应该是都可以独立运行的;在 HttpRunner 中,每个 YAML/JSON 文件对应一条测试用例。

测试用例包含 测试脚本 和 测试数据 两部分:

测试用例 = 测试脚本 + 测试数据

测试脚本 重点是描述测试的业务功能逻辑,包括预置条件、测试步骤、预期结果等,并且可以结合辅助函数(debugtalk.py)实现复杂的运算逻辑;可以将 测试脚本 理解为编程语言中的 类(class);

测试数据 重点是对应测试的 业务数据逻辑,可以理解为类的实例化数据;

测试数据 和 测试脚本 分离后,就可以比较方便地实现数据驱动测试,通过对测试脚本传入一组数据,实现同一业务功能在不同数据逻辑下的测试验证。

 测试步骤(teststep)

测试用例是测试步骤的 有序 集合,而对于接口测试来说,每一个测试步骤应该就对应一个 API 的请求描述。

测试用例集(testsuite)

测试用例集 是 测试用例 的 无序 集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的。

如果确实存在先后依赖关系怎么办,例如登录功能和下单功能。正确的做法应该是,在下单测试用例的前置步骤中执行登录操作。

- config:

    name: order product

- test:

    name: login

    testcase: testcases/login.yml

- test:

    name: add to cart

    api: api/add_cart.yml

- test:

    name: make order

    api: api/make_order.yml

2、文件类型

在 HttpRunner 自动化测试项目中,主要存在如下几类文件:

YAML/JSON(必须):测试用例文件,存储接口测试相关信息

debugtalk.py(可选):存储项目中逻辑运算辅助函数

.env(可选):存储项目环境变量,通常用于存储项目敏感信息

.csv(可选):项目数据文件,用于进行数据驱动

reports:默认生成测试报告的存储文件夹

3、测试用例结构



三、快速上手

1、测试用例执行

操作

修改登录账号和密码后执行测试用例

 hrun login1.yml

2、用例断言(关键字validate)

作用        

判断接口返回内容的准确性;

示例

    validate:

        - eq: [content.code, 200]

        - eq: [content.success, true]

        - eq: [content.message, "SUCCESS"]

        - eq: [content.data.char_pieces.29, "3"]

断言关键字

3、作用域

在测试用例内部,HttpRunner 划分了两层变量空间作用域(context)。

config:作为整个测试用例的全局配置项,作用域为整个测试用例;

test:测试步骤的变量空间(context)会继承或覆盖 config 中定义的内容;

各个测试步骤(test)的变量空间相互独立,互不影响;

如需在多个测试步骤(test)中传递参数值,则需要使用 extract 关键字,并且只能从前往后传递

操作

把请求URL地址配置成用例的全局配置项(base_url)

把 hearders的Content-Type 配置成用例的全局配置项

- config:

    name: 登录功能

    base_url: ****************************

    parameters: 

    request:

      headers:

        Content-Type: application/x-www-form-urlencoded


4、变量(关键字variables)

        定义变量

局部变量:测试步骤中定义的变量

 全局变量:congfig中定义的变量

        变量引用($name)

示例

- config:

    name: 登录功能

    variables: 

        name: '15920143494'

        pwd: 'vvic2017'

5、测试步骤编写

通过浏览器工具(F12)或者抓包工具抓取loginUMoreInfo接口信息。

在login1.yml文件中添加获取登录用户信息(loginUMoreInfo接口)的测试步骤。

运行login1.yml文件。

6、参数传递(extract)

测试场景:

B接口需要用到A接口返回的响应内容某个参数时,需要获取到该参数值,并传递给B接口使用。

定义关键字extract的参数名称和参数值,如下所示:

    extract:

        -   recordCount: content.page.recordCount

引用参数

   $recordCount


7、hook(钩子)机制

可以在请求前和请求后调用钩子函数。

hook 机制分为两个层级:

测试用例层面(config中配置)

setup_hooks: 在整个用例开始执行前触发 hook 函数,主要用于准备工作。

teardown_hooks: 在整个用例结束执行后触发 hook 函数,主要用于测试后的清理工作。

    2) 测试步骤层面(teststep中配置)

setup_hooks: 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作;也可以实现对请求的 request 内容进行预处理。

teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理。

编写 hook 函数

hook 函数的定义放置在项目的 debugtalk.py 中,在 YAML/JSON 中调用 hook 函数仍然是采用 ${func($a, $b)} 的形式。

def hook_print(msg):

    print(msg)

对于单个测试用例层面的 hook 函数,除了可传入自定义参数外,还可以传入与当前测试用例相关的信息,包括请求的 $request 和响应的 $response,用于实现更复杂场景的灵活应用。

操作:

1、在登录接口请求前等待2秒。(函数:setup_hook_sleep_N_sec)

2、在登录接口请求后等待4秒。(函数:teardown_hook_sleep_N_secs)

debugtalk.py中setup_hook_sleep_N_secs函数:

#指定接口请求前的休眠时间

def setup_hook_sleep_N_secs(n_secs):

    time.sleep(n_secs)

teardown_hook_sleep_N_secs函数

#指定接口响应后的休眠时间

def teardown_hook_sleep_N_secs(response, n_secs):

    if response.status_code == 200:

        time.sleep(n_secs)

    else:

        time.sleep(1)

8、环境变量

.env文件配置内容:

debugtalk.py内容

base_url = os.environ["base_url"] #读取环境变量

def get_base_url():

    return base_url

测试用例中调用环境变量

- config:

    name: 档口中心-商品数据-列表

    base_url: ${get_base_url()}

9、文件目录结构管理 && 脚手架工具

推荐的方式汇总如下:

debugtalk.py 放置在项目根目录下,假设为 PRJ_ROOT_DIR

.env 放置在项目根目录下,路径为 PRJ_ROOT_DIR/.env

接口定义(API)放置在 PRJ_ROOT_DIR/api/ 目录下

测试用例(testcase)放置在 PRJ_ROOT_DIR/testcases/ 目录下

测试用例集(testsuite)文件必须放置在 PRJ_ROOT_DIR/testsuites/ 目录下

data 文件夹:存储参数化文件,或者项目依赖的文件,路径为 PRJ_ROOT_DIR/data/

reports 文件夹:存储 HTML 测试报告,生成路径为 PRJ_ROOT_DIR/reports/

10、脚本调试(log)

若需要查看到更详尽的信息,例如请求的参数和响应的详细内容,可以将日志级别设置为DEBUG,即在命令中添加--log-level debug。

hrun --log-level debug testcases/test.yml


如有不懂,请联系我

你可能感兴趣的:(10步玩转httprunner框架)