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]

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

猜你喜欢

转载自blog.csdn.net/okcross0/article/details/130385328
今日推荐