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]

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群:,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值