【效能平台】django项目中集成httprunner做接口测试(五)

导读:本篇文章讲解 【效能平台】django项目中集成httprunner做接口测试(五),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、httprunner处理正向用例的接口测试

1、安装Httprunner

如果不加版本号的话,会默认下载3版本的,3版本的bug比较多

pip install httprunner==2.5.7

2、安装完成后,会自带hrun、httprunner命令,用于运行用例、管理操作

3、创建项目工程结构

hrun --startproject django_project1_httprunner

在这里插入图片描述

api目录:用于存放接口的最小单元(正向用例)
reports目录:用于存放测试报告
testcases目录:用于处理接口复杂的执行逻辑;处理接口依赖
testsuites目录:用户批量执行用例,可以实现数据驱动测试
.env文件:用于存放全局环境变量
debugtalk.py文件:用于定义python函数,处理动态参数

4、Yaml配置文件格式

1、yaml是数据格式,不是数据类型
2、yaml配置文件的后缀为yml、yaml
3、yaml中使用#作为注释,注释只能在某一行的前后,不能在同一行
4、yaml中有2种结构,一个是key:value,value与冒号之间必须有空格
另一个是 -key:value。“-”表示代码为列表结构
5、yaml文件中嵌套的同一级条目前的缩进必须一致,一般缩进2个空格
6、yaml中如果使用引号(单双引号),那么该value为字符串类型
7、如果value中只要包含有字母,哪怕没有添加引号,一般也会识别为字符串类型
(false、true、on、off除外),null为空
8、value为false、true、on、off、null是布尔类型
9、value中为纯数字或小数,会被识别为int或者float类型

在这里插入图片描述

name:指定当前用例名称
variables:设置变量
request:定义当前接口的配置信息
url:指定当前的接口的url地址
method:指定当前接口的请求方法,不区分大小写
headers:指定请求头参数
json:指定请求体为json格式的参数
validate:指定断言

1、传递json格式的参数用json作为key;
传递form表单参数用data作为key;
传递查询字符串参数用params作为key

2、eq为断言类型,断言是否实际值和期望值是否相等
完整形式为equals、也可以使用==、is
lt、le、gt、ge、ne等等

方括号中第一个参数为实际值,第二个参数为期望值

3、实际值:
status_code(响应状态码)、
cookies、
headers(响应头)、
content(响应体数据)、
text(响应体数据)、
json(响应体数据)
如果一个接口返回的是json格式的数据,那么content、text、json获取的是字典(嵌套字典的列表)

4、contains:判断实际值是否包含期望值
contained_by:判断实际值是否包含在期望值中

5、实际值提取方式:
a、使用content\text\json加上“.”运算加上key,就能获取到相应的值
b、使用content.key如果提取的结果为列表,可以使用列表中的数字索引来提取

6、例如:判断响应体返回的结果中是否包含username
- contains: ["json", "username"]
例如:判断响应体状态码是否为200
- eq: ["status_code", 200]
判断响应体返回的结果中user_id是否小于22
- lt: ["json.user_id",22]

7、variables设置变量
a、指定当前用例的局部变量
b、一旦指定就能在变量定义的下方任意地方调用
c、使用$变量进行调用
d、作用域为当前yaml文件,变量定义的下方,不能跨yaml文件进行调用

8、设置环境变量(全局变量)
a、可以在项目根路径下,.env文件中创建环境变量
b、定义:环境变量名=环境变量值
c、调用:可以在任意一个yaml或者json用例文件中,使用${ENV(变量名称)}

.env文件:用于存放全局环境变量

USERNAME=zhilong
PASSWORD=666666
BASE_URL=http://192.168.17.129:8001

api目录:用于存放接口的最小单元(正向用例)

name: "登录api接口"

base_url: "${ENV(BASE_URL)}"

variables:
    username: "${ENV(USERNAME)}"
    password: "${ENV(PASSWORD)}"

request:
    url: "/user/login/"
    method: POST
    headers:
        Content-Type: "application/x-www-form-urlencoded"
        User-Agent: "Mozilla/5.0"

    data:
        username: "$username"
        password: "$password"

    verify: false

    params:
        p: 1
        s: 3

validate:
    - eq: ["status_code", 200]

第一种运行:控制台执行用例:

hrun ceshi_platform_httprunner/api/login_api_form_bk.yml

第二种运行:新建test.py文件,python程序运行,会将所有数据存放到字典里面

from httprunner.api import HttpRunner
httprunner=HttpRunner()
httprunner.run(r'/home/zhilong/Desktop/project/ceshi_platform/ceshi_platform_httprunner/api/login_api.yml')
print(httprunner._summary)

reports目录:用于存放测试报告

在这里插入图片描述

二、httprunner处理具有接口依赖的测试——获取项目的数据

获取项目数据前要进行token认证

先要向登录接口发请求,从响应体中获取token,但是在单个api接口中是没法实现的,如果想要实现接口依赖,需要去testcases中去创建

登录接口api

name: "登录api接口"

base_url: "${ENV(BASE_URL)}"

variables:
    username: "${ENV(USERNAME)}"
    password: "${ENV(PASSWORD)}"

request:
    url: "/user/login/"
    method: POST
    headers:
        Content-Type: "application/x-www-form-urlencoded"
        User-Agent: "Mozilla/5.0"
    data:
        username: "$username"
        password: "$password"

    verify: false

    params:
        p: 1
        s: 3

testcases目录下定义project_list.yaml文件:


config:
    name: "获取项目列表数据接口测试"

teststeps:
-
    name: "先登录"
    #api:导入api文件夹下的接口的api最小执行单元
    api: "ceshi_platform_httprunner/api/login_api_form.yml"
    #extract:从相应结果中提取数据,并设置变量
    #设置的变量,可以在当前yaml用例文件下方任意地方调用
    extract:
        - TOKEN: "content.token"

-
    name: "获取项目列表数据接口 "
    api: "ceshi_platform_httprunner/api/projects_list_api.yml"

获取项目列表数据api:


name: "获取项目列表数据"
base_url: "${ENV(BASE_URL)}"

request:
    url: "/projects/"
    method: GET
    headers:
        #Content-Type: "application/json"
        Accept: "application/json"
        Authorization: "JWT $TOKEN"
    params:
        size: 3
        page: 2

validate:
    - eq: ["status_code", 200]

执行用例:

hrun ceshi_platform_httprunner/testcases/project_list_testcase.yml --log-level debug

测试报告:

在这里插入图片描述

三、登录接口数据驱动测试

首先到testcases文件中定义执行逻辑,先进行登录接口

定义登录api:api/login_api_form.yml


name: "登录api接口"

base_url: "${ENV(BASE_URL)}"

variables:
    username: "${ENV(USERNAME)}"
    password: "${ENV(PASSWORD)}"

request:
    url: "/user/login/"
    method: POST
    headers:
        #让User-Agent动态变化,需要在项目根路径下的debugtalk.py文件中定义函数或者类,用于处理动态变化的参数
        #使用${函数名(参数1,参数2,......)}
        Content-Type: "application/x-www-form-urlencoded"
        User-Agent: "${random_generate_uagent()}"

    data:
        username: "$username"
        password: "$password"

    verify: false


定义login_testcases.yaml:定义测试逻辑,先执行登录接口;validate中的断言在测试套件中的每一条用例执行完毕后,进行断言


config:
    name: "登录接口"


teststeps:
-
    name: "登录接口"
    api: "api/login_api_form.yml"

    validate:
        - contains: ["content", $msg]

再到testsuites文件中定义执行的测试用例或者从debugtalk.py中加载用例,数据驱动测试

#指定测试套件中的全局配置信息
config:
    name: "测试条件"

testcases:
-
    name: "登录接口测试"
    testcase: "testcases/login_testcase.yml"
#    parameters:
#     title-username-password-status_code-msg:
#        - ["正常登录","zhilong","666666",200,"token"]
#        - ["用户名为空","","666666",400,"username"]
#        - ["密码为空","zhilong","",400,"password"]
#        - ["密码不正确","zhilong","000000",400,"non_field_errors"]

#    parameters:
#        title-username-password-status_code-msg: ${P(data/data.csv)}

    parameters:
        title-username-password-status_code-msg: ${get_accounts()}

debugtalk.py文件:用于定义python函数,获取测试用例,将用例加载到测试套件中

import random
import time

def sleep(n_secs):
    time.sleep(n_secs)

def random_generate_uagent():
    user_agent_list=["Mozilla/5.0","Mozilla/5.0 kb","Mozilla/5.0 zil","Mozilla/5.0 zz","Mozilla/5.0 bi",]
    return random.choice(user_agent_list)

def get_accounts():
    accounts=[
        {"title":"正常登录","username":"zhilong","password":"666666","status_code":200,"msg":"token"},
        {"title": "正常登录", "username": "zhilong1", "password": "231231", "status_code": 200, "msg": "token"},
        {"title": "正常登录", "username": "zhilong2", "password": "124", "status_code": 200, "msg": "token"}
    ]
    return accounts

if __name__ == '__main__':
    print(random_generate_uagent())

执行测试用例

hrun ceshi_platform_httprunner/testsuites/login_testsuite.yml

测试报告
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74043.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!