Postman接口测试工具进阶篇-如何巧设断言

Posted 测试萌萌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postman接口测试工具进阶篇-如何巧设断言相关的知识,希望对你有一定的参考价值。

postman请求发布话题断言

var jsonData = pm.response.json();



pm.test("success value is true", function () {



        pm.expect(jsonData["success"]).to.eql(true);

});



pm.test("topic id value is not null",function(){

    var topic_id = jsonData['topic_id'];

    // 更多断言方式操作,查看http://www.chaijs.com/api/

bdd/

   pm.expect(topic_id).to.not.eql(null);

})

接口关联自动化怎么做?

1.接口关联:2或3个以上直接通过某个数据作为枢纽传递值。

解决思路:

1.第一个接口拿到服务器响应结果,将响应结果中的值提取出来,设置为变量。

2.后面的接口直接调用变量值即可。

Pre-request-script

执行发送请求之前的操作,比如可以在这里设置一些变量

// 发送请求执行执行的脚本



pm.environment.set("title", "1111111111111111111111111111");

pm.environment.set("tab", "ask");

pm.environment.set("content", "22222222222222222222222222");

在脚本中可以调用变量,还是以 {{变量名}} 的方式

在其他请求的【Tests】脚本中,获取变量,不能再使用{{变量名}}的方式调用。要使用获取变量的方式来调用。

var jsonData = pm.response.json();  



var data = jsonData['data']; 



// 获取发布话题中设置环境变量 title

var title = pm.environment.get("title");  

pm.test("title 的值应该为"+title, function () {

        pm.expect(data["title"]).to.eql(title);

});



// 获取发布话题中设置环境变量content

var content = pm.environment.get("content");
pm.test("content 的值应该为"+content, function () {

    pm.expect(data["content"]).to.eql(content);

});

 // 获取发布话题中设置环境变量tab

var tab = pm.environment.get("tab"); 

pm.test("tab 的值应该为"+tab, function () {

    pm.expect(data["tab"]).to.eql(tab);

});

Runner 中运行结果

数据驱动测试

核心:根据数据文件内容进行自动化测试

1 创建测试数据文件 data.csv

解决中文乱码问题:

记事本打开data.csv文件,【文件】–【另存为】选择utf8编码 --【保存】

2 设计脚本

脚本中使用变量,变量要与csv文件的字段保存一至。

3 辑断言部分

// 获取变量

var except_val = pm.variables.get("except_val");

pm.test("error_msg value should be "+except_val, function () {

    var jsonData = pm.response.json();

    pm.expect(jsonData['error_msg']).to.eql(except_val);

});

编辑完之后一定记得保存脚本。

4 Runner中运行

执行

python脚本

1 接口返回值

import requests



"""





"""





base_url = "http://39.107.96.138:3000/api/v1/"



testdata = {

        "accesstoken":"49b2e830-4305-475d-b6b5-52287cc

5daaa",

        "title":"2313131231231232",

        "tab":"ask",

        "content":"xxxxxxxxxxxxx"

    }

def test_new_topic():

    """

    测试发布话题

    :return:

    """

    url = base_url+'topics'

    r = requests.post(url,json=testdata)

    jsonData = r.json()



    assert r.status_code == 200



    assert jsonData['success']

    print("test_new_topic, topicid:",jsonData['topic_id'])



    assert jsonData['topic_id'] is not None



    return jsonData['topic_id']



def test_topic_detail():

    topic_id = test_new_topic()

    print("test_topic_detail topicid:",topic_id)

    url = base_url+"/topic/"+topic_id

    testparmas = {

        'mdrender':'false'

    }

    r = requests.get(url,params=testparmas)

    print("rjson :",r.json())



    jsonData = r.json()

    data = jsonData['data']



    assert data['title'] == testdata['title']

    assert data['tab'] == testdata['tab']

    assert data['content'] == testdata['content']



def test_update_topic():

    pass

2 使用fixture

通过@pytest.fixture 传递参数

@pytest.fixture

scope:作用域

autouse:是否自动加载

name :引用名称

parmas:参数

ids:执行显示函数名称后缀

import pytest

import requests



base_url = "http://39.107.96.138:3000/api/v1/"

testdata = {

        "accesstoken":"49b2e830-4305-475d-b6b5-52287c

c5daaa",

        "title":"2313131231231232",

        "tab":"ask",

        "content":"xxxxxxxxxxxxx"

    }



@pytest.fixture(scope="module",autouse=True,name="topic_id")

def newtopic():

    url = base_url + 'topics'

    r = requests.post(url, json=testdata)

    jsonData = r.json()



    return jsonData['topic_id']





def test_update_topic(topic_id):

    """

    编辑话题

    :return:

    """

    print("test_update_topic",topic_id)



def test_collect_topic(topic_id):

    """

    收藏话题

    :return:

    """

    print("test_collect_topic",topic_id)





def test_reply_topic(topic_id):

    """

    回复话题

    :return:

    """

    print("test_reply_topic",topic_id)

作业1

上述代码 三个api 用python方式实现。

1 csv数据驱动

注意csv文件的路径

import pytest

import os

import csv

import requests





"""

使用csv中的数据进行数据驱动测试

"""



dir=os.path.dirname(os.path.dirname( os.path.dirname(__file__)))



csvfile = os.path.join(dir,'data/data.csv')



csvdata = []

with open(csvfile,encoding='utf8') as file:

    filedata= csv.reader(file)

    next(filedata)

    for x in filedata:

        csvdata.append(x)



print(csvdata)

"""

 [['0418178a-b80c-4e15-aa8f-bab03a3491cb', '1111111111', 'ask', '22222222222', '错误的accessToken'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '', 'ask', '2222222222', '标题不能为空'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1', 'ask', '2222222222', '标题字数太多或太少'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', '', '2222222222', '必须选择一个版块'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', 'ask', '', '内容不可为空']]

  ||   数据格式转换一下

  \\/

[{"token":"0418178a-b80c-4e15-aa8f-bab03a3491cb","tab":"ask"},{....}]

"""





@pytest.fixture(params=csvdata)

def data(request):

    return request.param



base_url = "http://39.107.96.138:3000/api/v1/"

def test_topics(data):

    url = base_url + 'topics'

    testdata={

        "accesstoken": data[0],

        "title": data[1],

        "tab": data[2],

        "content": data[3]

    }

    r = requests.post(url, json=testdata)

    jsonData = r.json()



    assert jsonData['error_msg'] == data[4]

作业2

数据格式转换

参考 数据格式转换

http://docs.python.org/zh-cn/3.7/tutorial/inputoutput.html#saving-structured-data-with-json

2 Excel作为数据驱动

import pytest

import os

import requests

from openpyxl import load_workbook

from openpyxl.worksheet.worksheet import Worksheet





"""

使用Excel中的数据进行数据驱动测试

"""



dir=os.path.dirname(os.path.dirname( os.path.dirname(__file__)))

excelfile = os.path.join(dir,'data/data.xlsx')



workbook = load_workbook(excelfile)worksheet:

Worksheet = workbook['topic_data']

exceldata = []

for row in worksheet.iter_rows(min_row=2,max_row=6,min_col=1,max_col=5,values_only=True):

    # print(row)

    exceldata.append(row)







"""

 [['0418178a-b80c-4e15-aa8f-bab03a3491cb', '1111111111', 'ask', '22222222222', '错误的accessToken'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '', 'ask', '2222222222', '标题不能为空'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1', 'ask', '2222222222', '标题字数太多或太少'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', '', '2222222222', '必须选择一个版块'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', 'ask', '', '内容不可为空']]

  ||   数据格式转换一下

  \\/

[{"token":"0418178a-b80c-4e15-aa8f-bab03a3491cb","tab":"ask"},{....}]

"""





@pytest.fixture(params=exceldata)

def data(request):

    return request.param



base_url = "http://39.107.96.138:3000/api/v1/"



def test_topics(data):

    url = base_url + 'topics'

    testdata={

        "accesstoken": data[0],

        "title": data[1],

        "tab": data[2],

        "content": data[3]

    }

    r = requests.post(url, json=testdata)

    jsonData = r.json()



    assert jsonData['error_msg'] == data[4]

最后: 欢迎大家关注公众号:【 伤心的辣条 】,领取一份300页pdf文档的Python自动化测试工程师核心知识点总结!

公众号里大部分资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果你测试中有许多的困惑,那么我创建的软件测试技术交流群将会是你接触良师益友的有益社区,同行或许可以给你带来一些实际性的帮助与突破。群:902061117 你也想知道同行都在怎样致富吧!

如果对你有一点点帮助,各位的「点赞」就是小编创作的最大动力,我们下篇文章见!

好文推荐:

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

“入职一年,那个被高薪挖来的自动化软件测试被劝退了。”

那个准点下班的人,比我先升职了…

自动化测试大总结

以上是关于Postman接口测试工具进阶篇-如何巧设断言的主要内容,如果未能解决你的问题,请参考以下文章

使用Postman工具做接口测试——断言与参数提取

Postman和接口自动化测试5-断言

Postman和接口自动化测试5-断言

Postman和接口自动化测试5-断言

Postman和接口自动化测试5-断言

Postman接口测试_设置断言