一、环境搭建
- python +unittest+ requests实现http请求的接口自动化
- Python的优势:语法简洁优美, 功能强大, 标准库跟第三方库灰常强大,建议大家事先了解一下Python的基础;
- unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
- Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP 库。它比urllib 更加方便,可以节约我们大量的工作,完全满足HTTP 测试需求。
- 在CMD命令行执行命令加载request第三方库:pip install requests
- python -m pip install pillow
二、方法
- pip安装requests第三方库,然后引入:import requests
- 引入json标准库,美化json输出:import json
- 调用requests库中的post方法,会给出所需要的参数,传入上面定义的url和data参数,运行.py文件就执行了post请求。
-
import requests #pip安装requests第三方库,然后引入
-
import json #引入json标准库,美化json输出
-
url = 'http://***/account/login'
-
data = {
-
"username":"***01",
-
"password":"password",
-
}
-
result = requests.post(url,data).json() #以json格式输出
-
print(result)
-
result = requests.post(url,data).text #以源码形式输出
-
print(result)
-
import requests#引入requests第三方包
-
import json#引入json包
-
class Login():
-
def httprequests(self,url,data,method):#self为类函数的默认函数,放在第一位
-
if method=="post":
-
res=requests.post(url,data)#post请求方法
-
else:
-
res=requests.get(url,data)#get请求方法
-
print(res.text)#以源码形式输出
-
print(res.json())#以json形式输出
-
#创建实例,调用函数
-
test1=Login()
-
login_url='https://www.******/pc/member/sign'
-
login_data={"flag":"mobile",
-
"password":"f5e05a41724115d076bfb1fd2bd9613e",
-
"mobile_phone":"136********"}
-
login_method='post'
-
test1.httprequests(login_url,login_data,login_method)
三、单元测试
- 什么是单元测试:单元测试就是对代码进行测试,本质就是对类或者函数进行测试
- 什么时候进行单元测试:代码完成后就开始进行测试
- 由谁进行单元测试:一般有开发自己进行测试
- 目的:尽可能早的介入测试,发现底层代码中的问题
- 方法:使用unittest方法包:import unittest
(1)先创建一个加法类-Mathmethod,存入Mathmethod.py文件
-
#定义一个数学加法类
-
class Mathmethod():
-
def add(self,a,b):
-
return(a+b)
-
def sub(self,a,b):
-
return(a-b)
(2)然后创建测试用例-TestMathmethod
-
import unittest
-
from HTMLTestRunner import HTMLTestRunner
-
from requesttest.math.Mathmethod import Mathmethod # 引入Mathmethod模块
-
#import HTMLTestRunnerNew
-
class TestMathmethod(unittest.TestCase):#创建TestMathmethod类,继承unittest.TestCase方法
-
#编写测试用例,函数命名必须以test_开头
-
def test_add_two_num(self):
-
res=Mathmethod().add(3,6)
-
print('两个数值相加结果是',res)
-
self.assertEqual(9,res)
-
def test_sub_two_num(self):
-
res=Mathmethod().sub(9,8)
-
print('两个数值相减结果是', res)
-
self.assertEqual(1,res)
(3)创建测试报告-使用HTML方法
-
import unittest
-
from HTMLTestRunner import HTMLTestRunner
-
from requesttest.math.TestMathmethod import TestMathmethod
-
testunit=unittest.TestSuite()#生成单元测试流程
-
testunit.addTest(TestMathmethod("test_add_two_num"))
-
testunit.addTest(TestMathmethod("test_sub_two_num"))#加载一条测试用例
-
fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
-
runner=HTMLTestRunner(
-
stream=fp,
-
title="加法测试",
-
description="用例执行情况:"
-
)
-
runner.run(testunit)
-
fp.close()
(4)也可使用txt的形式输出测试报告
-
import unittest
-
from HTMLTestRunner import HTMLTestRunner
-
from requesttest.math.TestMathmethod import TestMathmethod
-
suite=unittest.TestSuite()#收集测试用例
-
loader=unittest.TestLoader()#加载测试用例-按照类的方法添加一个类下面的所有测试用例
-
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))
-
file=open('test_case.txt','w+')#测试报告的存储路径和测试报告的读写方式
-
runner=unittest.TextTestRunner(
-
stream=file,
-
verbosity=2,#测试报告的详细程度
-
)
-
runner.run(suite)#执行测试用例
-
test_add_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok
-
test_sub_two_num (requesttest.math.TestMathmethod.TestMathmethod) ... ok
-
----------------------------------------------------------------------
-
Ran 2 tests in 0.000s
-
OK
(5)生成测试报告方法三(HTML的方式)
-
import unittest
-
from HTMLTestRunner import HTMLTestRunner
-
from requesttest.math.TestMathmethod import TestMathmethod
-
suite=unittest.TestSuite()#收集测试用例
-
loader=unittest.TestLoader()#加载测试用例
-
suite.addTest(loader.loadTestsFromTestCase(TestMathmethod))
-
fp=open('D:\\test\\unittest1.html','wb')#创建测试报告,以写的方式存入某个路径
-
runner=HTMLTestRunner(
-
stream=fp,
-
title="加法测试",
-
description="用例执行情况:"
-
)
-
runner.run(suite)
-
fp.close()