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打开报告文件,写入执行内容、标题、执行情况、测试人员,生成接口测试报告。这就是我的接口自动化测试

posted @ 2025-03-26 11:32  君庭  阅读(25)  评论(0)    收藏  举报