day:30 unittest框架——接口(python+request)
接口unittset框架
一.调用所有接口
unittest.main()
案例:
import unittest
import requests
from time import *
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.s=requests.Session()
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
def test1_dl(self):
url1 = "http://49.233.201.254:8080/cms/manage/loginJump.do"
data1={'userAccount':'admin','loginPwd':'123456'}
h1={"Content-Type":"application/x-www-form-urlencoded"}
jk1=self.s.request("post",url=url1,data=data1,headers=h1)
print(jk1.text)
def test2_yh(self):
url2 = "http://49.233.201.254:8080/cms/manage/queryUserList.do"
data2={
'startCreateDat':'',
'endCreateDate':'',
'searchValue':'',
'page':'1'
}
h2={"Content-Type":"application/x-www-form-urlencoded"}
jk2=self.s.request("post",url=url2,data=data2,headers=h2)
print(jk2.text)
def test3(self):
url3 = "http://49.233.201.254:8080/cms/manage/findCategoryByPage.do"
data3 = {'parentId':'',
'categoryName':'',
'page':1}
h3 = {"Content-Type": "application/x-www-form-urlencoded"}
jk3 = self.s.request("post", url=url3, data=data3, headers=h3)
print(jk3.text)
if __name__ == '__main__':
unittest.main()
二、运行部分用例接口
unittest.TestSuite()套件
addTest 添加到套件中
添加环境变量
requests.Session()#调用方法 保持会话
案例
import unittest
import requests
from time import *
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.s=requests.Session()
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None:
url1 = "http://49.233.201.254:8080/cms/manage/loginJump.do"
data1 = {'userAccount': 'admin', 'loginPwd': '123456'}
h1 = {"Content-Type": "application/x-www-form-urlencoded"}
jk1 = self.s.request("post", url=url1, data=data1, headers=h1)
print(jk1.text)
def tearDown(self) -> None:
pass
# def test1_dl(self):
#
def test2_yh(self):
url2 = "http://49.233.201.254:8080/cms/manage/queryUserList.do"
data2={
'startCreateDat':'',
'endCreateDate':'',
'searchValue':'',
'page':'1'
}
h2={"Content-Type":"application/x-www-form-urlencoded"}
jk2=self.s.request("post",url=url2,data=data2,headers=h2)
print(jk2.text)
def test3(self):
url3 = "http://49.233.201.254:8080/cms/manage/findCategoryByPage.do"
data3 = {'parentId':'',
'categoryName':'',
'page':1}
h3 = {"Content-Type": "application/x-www-form-urlencoded"}
jk3 = self.s.request("post", url=url3, data=data3, headers=h3)
print(jk3.text)
if __name__ == '__main__':
# unittest.main()
tj=unittest.TestSuite()
# tj.addTest(Cms("test2_yh"))
tj.addTests([Cms("test2_yh"),Cms("test3")])
unittest.TextTestRunner().run(tj)
三、执行一个路径下的用例
unittest.TestLoader()
案例:
import unittest
import requests
from time import *
import os
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.s=requests.Session()
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None:
url1 = "http://49.233.201.254:8080/cms/manage/loginJump.do"
data1 = {'userAccount': 'admin', 'loginPwd': '123456'}
h1 = {"Content-Type": "application/x-www-form-urlencoded"}
jk1 = self.s.request("post", url=url1, data=data1, headers=h1)
print(jk1.text)
def tearDown(self) -> None:
pass
# def test1_dl(self):
#
def test2_yh(self):
url2 = "http://49.233.201.254:8080/cms/manage/queryUserList.do"
data2={
'startCreateDat':'',
'endCreateDate':'',
'searchValue':'',
'page':'1'
}
h2={"Content-Type":"application/x-www-form-urlencoded"}
jk2=self.s.request("post",url=url2,data=data2,headers=h2)
print(jk2.text)
def test3(self):
url3 = "http://49.233.201.254:8080/cms/manage/findCategoryByPage.do"
data3 = {'parentId':'',
'categoryName':'',
'page':1}
h3 = {"Content-Type": "application/x-www-form-urlencoded"}
jk3 = self.s.request("post", url=url3, data=data3, headers=h3)
print(jk3.text)
if __name__ == '__main__':
# unittest.main()
# tj=unittest.TestSuite()
# # tj.addTest(Cms("test2_yh"))
# tj.addTests([Cms("test2_yh"),Cms("test3")])
# unittest.TextTestRunner().run(tj)
path=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd"
d=unittest.TestLoader().discover(start_dir=path,pattern="kj*.py")
unittest.TextTestRunner().run(d)
四、生成自动化测试报告
1.准备报告模板


2.导入模板
import unittest
import requests
import os
from selenium import webdriver
from time import *
from zdh.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.s=requests.Session()
@classmethod
def tearDownClass(cls) -> None:
pass
def setUp(self) -> None:#方法的开始 登录
u1="http://49.233.201.254:8080/cms/manage/loginJump.do"
t1={"Content-Type":"application/x-www-form-urlencoded"}
d1={"userAccount":"admin","loginPwd":"123456"}
jk1=self.s.request("post",url=u1,headers=t1,data=d1)
# print(jk1.text)
def tearDown(self) -> None:#方法的结束
pass
def test1(self):#用户管理
url2="http://49.233.201.254:8080/cms/manage/queryUserList.do"
t2={"Content-Type":"application/x-www-form-urlencoded"}
date2={"startCreateDate":"","endCreateDate":"",'searchValue':'',"page":"1"}
jk2=self.s.request("post",url=url2,headers=t2,data=date2)
print(jk2.text)
def test2(self):#添加用户
url3="http://49.233.201.254:8080/cms/manage/saveSysUser.do"
t3={"Content-Type": "application/x-www-form-urlencoded"}
date3={"id": "" ,
'userName':'dc',
'userSex':'1',
'userMobile': '13722222222',
'userEmail': '16782636@qq.com',
'userAccount':'tyu',
'loginPwd': '123456',
'confirmPwd': '123456'}
jk3 = self.s.request("post",url=url3, headers=t3, data=date3)
print(jk3.text)
def test3(self):#搜索用户
url4="http://49.233.201.254:8080/cms/manage/queryUserList.do"
t4={"Content-Type": "application/x-www-form-urlencoded"}
date4={'startCreateDate':'',
'endCreateDate':'',
'searchValue':'dc',
'page':1}
jk4=self.s.request("post",url=url4, headers=t4, data=date4)
print(jk4.text)
if __name__ == '__main__':
# unittest.main()
tj=unittest.TestSuite()
# tj.addTest(Cms("test3"))
unittest.TextTestRunner().run(tj)
path=r"D:\dcs\ruanjian\python\zdh"
bgpath=r"D:\dcs\ruanjian\python\zdh"
d=unittest.TestLoader().discover(start_dir=path,pattern="ui_jk.py")
new=strftime("%y-%m-%d %H=%M-%S")
file=bgpath+"/"+str(new)+"jk.html"
f=open(file,"bw")
HTMLTestRunner(
stream=f,title="接口自动化报告",description="接口用例执行情况",tester="dcs"
).run(d)
测试报告

五、接口自动化是如何做的?
结合python+requests+unittest框架做接口自动化测试
先import 导入 unittest这个模块,然后封装一个类class 定义为定义一个test去继承(unittest.testcase):
然后就是类的开始,类开始和结束前面需要加一个装饰器@classmethod,类开用def setupclass(cls)来表示,类的开始cls.session=requests.session()。类结束要用def teardownclass(cls)来表示。类开始结束在整个框架中只会运行一次。然后就是方法开始方法结束,方法开始与结束在每一条用例都会运行一次,方法开始用def setup(self)来表示,方法结束用def teardownclass(self)来表示。后面就写用例,书用例用def test_开头将每个接口都写上顺序,按ascii码顺序排序1-9,A-Z,a-z,在编写接口的参数和接口请求方式等,或者在py文件中写好并导入调用,最后用main方法作为入口:if _ _name_ _==’_ _main_ _’:用来执行用执行偶三种方法:第一种:unittest.main()来调用上面的所有用例,第二种方法使用:unittest.TestSuite () 套件添加部分用例,addTest(),在使用unittest.estrunner,在用run执行;第三种方法:就是执行一个路径下所有的用例:unittest.defaultTestLoader.discover(start_dir=路径,pattern="搜索的内容"),在使用unittest.TextTestRunner()运行用例,还可以导入报告模板HTMLTestRunner,在去open打开报告文件,写入执行内容、标题、执行情况、测试人员,生成接口测试报告。这就是我的接口自动化测试
浙公网安备 33010602011771号