requests接口测试

requests接口测试,第1张

一、介绍

requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到, Requests是Python语言的第三方的库,专门用于发送HTTP请求

二、前提

在当前项目安装requests包:pip install requests

三、get请求

1.无参请求:

r  = requests.get('http://www.baidu.com')

2.有参请求:

#方式一:参数和路径分开
param = {'key1':'value1','key2':'value2','key3':None} 
r = requests.get('http://www.baidu.com',params=param)

#方式二:参数和路径拼接
r = requests.get('http://www.baidu.com?key1=value1&key2=value2&key3=None')

#如果请求参数为字符串类型,可以通过eval()执行一个字符串表达式,并返回表达式的值
param = eval("{'key1':'value1','key2':'value2','key3':None}")
r = requests.get('http://www.baidu.com',params=param)

四、post请求

param = {'key1':'value1','key2':'value2'}
r = requests.post("http://www.baidu.com", data=param)

五、requests的响应

r.status_code        响应状态码
r.heards             响应头
r.cookies            响应cookies
r.text               响应文本
r.json()             响应的字典类型数据 
r. encoding          当前编码
r. content           以字节形式(二进制)返回

六、requests扩充

#1:添加等待时间,超过等待时间则报错 
requests.get(url,timeout=1)
#2:添加请求头信息
requests.get(url,headers=headers) 
#3:添加文件
requests.post(url, files=files)
#4:文件传输
url = 'http://www.baidu.com'
files = {'file': open('report.xls', 'rb')} 
r = requests.post(url,files=files)

七、接口关联

  • 在第一个接口中设置全局变量,在第二个接口中通过全局变量名引用
import requests,unittest

class TestClass(unittest.TestCase):
    def testGet(self):
        #通过eval()执行一个字符串表达式,并返回表达式的值
        param=eval('{"phone":"13355571803","key":"f32c5a4a9d4356a16af2bdf1739f908e"}')
        response=requests.get(url="http://apis.juhe.cn/mobile/get",params=param)
        print(response.json())
        #设置全局变量
        global city
        #断言
        city=response.json()["result"]["city"]
        self.assertEqual(city,"徐州")

    def testPost(self):
        #post请求
        data=eval('{"city":city,"key":"d24affbf5b215c5de8f4182da6e8f1b6"}')
        response=requests.post(url="http://apis.juhe.cn/simpleWeather/query",data=data)
        print(response.json())

if __name__ == '__main__':
    unittest.main()

八、读取csv/excel数据

1.csv+unittest+requests+HTMLTestRunner

①创建csv文件存入测试数据

url,param,request,code
http://apis.juhe.cn/mobile/get,"{""phone"":""1335557"",""key"":""ab6ef7f61563fd78869ab99956554a""}",get,0
http://apis.juhe.cn/mobile/get,"{""phone"":"""",""key"":""ab6ef7f61563fd78869ab99956554a""}",get,201101
http://apis.juhe.cn/mobile/get,"{""phone"":""123"",""key"":""ab6ef7f61563fd78869ab99956554a""}",get,201102
http://apis.juhe.cn/mobile/get,"{""phone"":""1335557"",""key"":""ab6ef7f61563fd78869ab9995655""}",get,10001
http://apis.juhe.cn/mobile/get,"{""phone"":""1335557"",""key"":""ab6ef7f61563fd78869ab99956554a""}",post,0

②创建读取数据的py文件,用于读取csv文件数据

# 导入csv模块
import csv

class ReadCsvClass():
    def read_csv(self):
        # 定义一个空列表
        item = []
        # 得到csv文件对象
        c = csv.reader(open("../data/csvData.csv", "r"))
        for csv_i in c:
            # 将获取的数据添加到列表中
            item.append(csv_i)
        #忽略表头 可以直接删除,也可以通过切片
        # item.pop(0)
        item=item[1::]

        return item

③编写测试用例类,通过unittest+requests将读取的数据传入开发代码进行测试

from readData.readCsv import ReadCsvClass
import requests,unittest

#读取csv文件数据
r=ReadCsvClass()
data=r.read_csv()

class TestCsvUnittestClass(unittest.TestCase):
    def testRequest(self):
        for i in data:
            #执行一个字符串表达式,并返回表达式的值
            param = eval(i[1])
            #判断请求方式是否为get
            if i[2]=="get":
                #用get方式请求
                result=requests.get(url=i[0],params=param)
                #转成字典,根据key获取value值
                error_code=result.json()["error_code"]
                #设置断言
                self.assertEqual(error_code,int(i[3]))
            else:
                #用post方式请求
                result=requests.post(url=i[0], data=param)
                #转成字典,根据key获取value值
                error_code=result.json()["error_code"]
                #设置断言
                self.assertEqual(error_code,int(i[3]))

if __name__ == '__main__':
    unittest.main()

④将HTMLTestRunner.py存到工具包下

⑤unittest+HTMLTestRunner生成测试报告

from common.HTMLTestRunner import HTMLTestRunner
from testDemo.testCsvUnittest import TestCsvUnittestClass
import unittest

class CsvHtmlClass():
    def htmlMethod(self):
        # 创建测试套件
        suite = unittest.TestSuite()
        # 创建列表储存测试用例名
        testList = ["testRequest"]
        for test_i in testList:
            suite.addTest(TestCsvUnittestClass(test_i))
        # 生成测试报告,以二进制形式写入
        with open("csvUnittestReport.html", "wb") as obj:
            HTMLTestRunner(
                stream=obj,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)  # 执行测试套件

# 实例化调用方法
c = CsvHtmlClass()
c.htmlMethod()

2.csv+pytest+requests+allure

①创建csv文件存入测试数据

②创建读取数据的py文件,用于读取csv文件数据

③编写测试用例类,通过pytest+requests+allure将读取的数据传入开发代码进行测试,并生成测试报告

  • pytest自带pytest-html生成测试报告
  • pytest+allure也可以生成测试报告,allure界面更加美观
from readData.readCsv import ReadCsvClass
import requests,pytest,os

#读取csv文件数据
r=ReadCsvClass()
data=r.read_csv()

class TestCsvPytestClass():
    def testRequest(self):
        for i in data:
            #执行一个字符串表达式,并返回表达式的值
            param = eval(i[1])
            #判断请求方式是否为get
            if i[2]=="get":
                #用get方式请求
                result=requests.get(url=i[0],params=param)
                #转成字典,根据key获取value值
                error_code=result.json()["error_code"]
                #设置断言
                assert error_code==int(i[3])
            else:
                #用post方式请求
                result = requests.get(url=i[0], params=param)
                #转成字典,根据key获取value值
                error_code = result.json()["error_code"]
                # 设置断言
                assert error_code == int(i[3])

if __name__ == '__main__':
    #pytest生成测试报告
    #pytest.main(["--html=../testReport/csvPytestReport.html","testCsvPytest.py"])

    #allure生成json类型的测试报告
    pytest.main(['--alluredir', 'report/result', 'testCsvPytest.py'])
    #将测试报告转为html格式
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
    #system函数可以将字符串转化成命令在服务器上运行
    os.system(split)

3.excel+unittest+requests+HTMLTestRunner

①本地创建excel文件存入测试数据,拖拽到PyCharm

 ②创建读取数据的py文件,用于读取excel文件数据

#导入加载excel工作簿的包
from openpyxl import load_workbook

class ReadExcelClass():
    def readExcel(self):
        #打开Excel表
        workbook=load_workbook("../data/excelTest.xlsx")
        #定位表单
        sheet=workbook["Sheet1"]
        #把所有行的数据放在列表中
        row_data=[]
        #行的起始索引从1开始,跳过标题行,数据起始行索引为2,由于range包左不包右,所以结束行+1
        for row in range(2,sheet.max_row+1):
            #把每个单元格的数据存到字典中,字典创建在循环里面是不同的地址
            #若把字典创建在循环外,则字典地址相同,这一次的数据会把上一次的数据覆盖
            cell_data = {}
            #print(id(cell_data))
            #列的起始索引从1开始,由于range包左不包右,所以结束行+1
            for column in range(1,sheet.max_column+1):
                #根据行和列确定单元格,把标题的单元格当做key,把数据的单元格当做value,存入字典
                cell_data[sheet.cell(1,column).value] = sheet.cell(row,column).value
            #把每行的字典数据存到列表中
            row_data.append(cell_data)
        #返回行数据
        return row_data

③编写测试用例类,通过unittest+requests将读取的数据传入开发代码进行测试

from readData.readExcel import ReadExcelClass
import unittest,requests

#读取Excel文件的数据
r=ReadExcelClass()
dataList=r.readExcel()

class TestExcelUnittestClass(unittest.TestCase):
    def testExcel(self):
        #遍历集合中的字典
        for dict in dataList:
            #执行一个字符串表达式,并返回表达式的值
            param=eval(dict["param"])
            #根据key判断value
            if dict["request"]=="get":
                #用get请求接口
                result=requests.get(url=dict["url"],params=param)
                #通过json表达式获取值
                error_code=result.json()["error_code"]
                #设置断言
                self.assertEqual(error_code,dict["code"])
            else:
                #用post请求接口
                result=requests.post(url=dict["url"],data=param)
                #通过json表达式获取值
                error_code=result.json()["error_code"]
                #设置断言
                self.assertEqual(error_code,dict["code"])

if __name__ == '__main__':
    unittest.main()

④将HTMLTestRunner.py存到工具包下

⑤unittest+HTMLTestRunner生成测试报告

from common.HTMLTestRunner import HTMLTestRunner
from testDemo.testExcelUnittest import TestExcelUnittestClass
import unittest

class ExcelHtmlClass():
    def htmlMethod(self):
        #创建测试套件
        suite=unittest.TestSuite()
        #创建列表,用于存储测试用例名
        testList=["testExcel"]
        for test_i in testList:
            #将测试用例添加到测试套件中
            suite.addTest(TestExcelUnittestClass(test_i))
        #生成测试报告,以二进制形式写入
        with open("excelUnittestReport.html", "wb") as obj:
            HTMLTestRunner(
                stream=obj,
                title="单元测试",
                description="测试一期",
                verbosity=2
            ).run(suite)  # 执行测试套件

#实例化调用
e=ExcelHtmlClass()
e.htmlMethod()

4.excel+pytest+requests+allure

①本地创建excel文件存入测试数据,拖拽到PyCharm

②创建读取数据的py文件,用于读取excel文件数据

③编写测试用例类,通过pytest+requests+allure将读取的数据传入开发代码进行测试,并生成测试报告

  • pytest自带pytest-html生成测试报告
  • pytest+allure也可以生成测试报告,allure界面更加美观
#读取Excel文件的数据
r=ReadExcelClass()
dataList=r.readExcel()

class TestExcelPyTestClass():
    def testExcel(self):
        #遍历集合中的字典
        for dict in dataList:
            #执行一个字符串表达式,并返回表达式的值
            param=eval(dict["param"])
            #根据key判断value
            if dict["request"]=="get":
                #用get请求接口
                result = requests.get(url=dict["url"], params=param)
                #通过json表达式获取值
                error_code = result.json()["error_code"]
                #设置断言
                assert error_code==dict["code"]
            else:
                #用post请求接口
                result = requests.post(url=dict["url"], data=param)
                #通过json表达式获取值
                error_code = result.json()["error_code"]
                #设置断言
                assert error_code==dict["code"]

if __name__ == '__main__':
    #pytest生成测试报告
    #pytest.main(["testExcelPytest.py","--html=../testReport/excelPytestReport.html"])

    #allure生成json类型的测试报告
    pytest.main(['--alluredir', 'report/result', 'testExcelPytest.py'])
    #将测试报告转为html格式
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
    #system函数可以将字符串转化成命令在服务器上运行
    os.system(split)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/732347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存