requests的分层架构与断言和邮件的运用

一、新建项目
image
image

二、新建6个包
(1)conf包   参数包
(2)api包   组建接口
(3)testcase 用例包
(4)run 运行包
(5)report 报告包
(6)utils 工具类包
image
第一个配置包:存放请求参数
image
image
案例:

登录接口

url1 = "http://49.233.201.254:8080/cms/manage/loginJump.do"  # 接口的url
data1 = {
"userAccount": "admin",
"loginPwd": 123456
}  # 接口的请求参数
headers1 = {"Content-Type": "application/x-www-form-urlencoded"}  # 接口请求类型

查询用户接口

url2 = "http://49.233.201.254:8080/cms/manage/queryUserList.do"
data2 = {
"startCreateDate": "", "endCreateDate": "",
"searchValue": "", "page": 1
}
headers2 = {"Content-Type": "application/x-www-form-urlencoded"}

查询栏目接口

url3 = "http://49.233.201.254:8080/cms/manage/findCategoryByPage.do"
data3 = {"parentId": "", "categoryName": "", " page": 1}
headers3 = {"Content-Type": "application/x-www-form-urlencoded"}

查询资讯接口

url4 = "http://49.233.201.254:8080/cms/manage/findArticleByPage.do"
data4 = {"categoryId": "", "startCreateDate": "", " endCreateDate": "", " articleTitle": "",
"page": 1}
headers4 = {"Content-Type": "application/x-www-form-urlencoded"}
第二包:api包组建接口
image
案例:
import  requests
from  conf.cms_conf  import *
s=requests.Session()
class  Cms(object):
def init(self):
pass
    def dl(self):
        dx=s.post(url=url1,data=data1,headers=headers1)
print(dx.json())
def yh(self):
        dx=s.post(url=url2,data=data2,headers=headers2)
print(dx.json())
def lm(self):
        dx = s.post(url=url3, data=data3, headers=headers3)
print(dx.json())
def zx(self):
        dx = s.post(url=url4, data=data4, headers=headers4)
print(dx.json())
if name == 'main':
    d=Cms()
    d.dl()
    d.yh()
    d.zx()
    d.lm()
第三个种包:testcase用例包
编写用例和管理用例的包
image
案例:
import  unittest
from  api.cms_api import *
class cms_case(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
pass
@classmethod
def tearDownClass(cls) -> None:
pass
   def  setUp(self) -> None:
pass
   def  tearDown(self) -> None:
pass
   def test1(self):
       Cms().dl()   #通过类名调用组建好的接口
def test2(self):
       Cms().yh()
def  test3(self):
       Cms().lm()
def   test4(self):
       Cms().zx()
if name == 'main':
    unittest.main()

第四种包:run运行包
image

其他包 ,见名思意。
总结:image
首先在pycharm里新建一个项目,然后构建6个包,分别是api构建包、conf配置包、report报告包、run运行包、testcase用例包以及utils工具包。
其中api包用来组建并发送接口请求,conf包用来存放所有接口的入参信息,report包用来放置运行所有测试用例生成的报告,run包用来自动加载所有的测试用例、并且运行,testcase包用来继承unittest单元测试框架、组建接口测试用例,utils包用来存放发送邮件和生成报告模块。
然后,在conf包中把参数值都写好,比如url、data和header;在api包中组建接口和发送接口请求,导入request和conf,参数名引用conf里面的,创建一个全局的session对象用来保持会话的状态和管理上下文,把各个接口的请求方式编写出来,同时用rep.json()来转换,全部封装在一个类里;在testcase包中组建测试用例导入unittest模块、api里面的Cms类,定义一个类,且继承unittest中的TestCase,用匿名对象来调用实例方法,然后进行断言,需要注意的是断言内容要与结果完全一致;最后,在run包里导入unittest、time、mail3、HTMLTestRunner,定义项目的路径、用例的路径、测试报告的名称、定义自动搜索用例,执行测试用例并生成报告,其中的时间戳也需要注意一下;此时,测试用例报告就会在report包里,最后用谷歌浏览器打开就可以查看了。

在分层结构中加入断言
在cms_api和cms_testcase两个py文件中编写
image
在 cms_api的文件中编写
将响应体转换成json格式,通过reture返回
image
案例:import  requests
from  conf.cms_conf  import *
s=requests.Session()
class  Cms(object):
def init(self):
pass
    def dl(self):
        dx=s.post(url=url1,data=data1,headers=headers1)
print(dx.json())
        js=dx.json() #转换成json格式
return js  #返回值 #{'code': '200', 'msg': '登录成功!', 'model': {}}
def yh(self):
        dx=s.post(url=url2,data=data2,headers=headers2)
print(dx.json())
        js1=dx.json()
return js1
def lm(self):
        dx = s.post(url=url3, data=data3, headers=headers3)
print(dx.json())
def zx(self):
        dx = s.post(url=url4, data=data4, headers=headers4)
print(dx.json())
if name == 'main':
    d=Cms()
    d.dl()
    d.yh()
    d.zx()
    d.lm()
在cms_tasecase文件通过assert断言
image
案例:import  unittest
from  api.cms_api import *
class cms_case(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
pass
@classmethod
def tearDownClass(cls) -> None:
pass
   def  setUp(self) -> None:
pass
   def  tearDown(self) -> None:
pass
   def test1(self):
a=Cms().dl()   #通过类名调用组建好的接口
      # assert a["msg"]== "查询用户成功!"
      # assert a["msg"] == "登录成功!"
    # {'code': '200', 'msg': '登录成功!', 'model': {}}
def test2(self):
       c1=Cms().yh()
# assert  c1['msg']=="查询用户成功!" #成功就执行运行
assert c1['msg'] == "查询用户成功" #断言失败
def  test3(self):
       Cms().lm()
def   test4(self):
       Cms().zx()
if name == 'main':
    unittest.main()

总结:我的理解是,先在api包中转换格式,然后再在用例包中断言

邮件发送
image
image
163邮箱链接:https://mail.163.com/js6/main.jsp?sid=YLZhjKoNeSZLYPABHNKgloDpIWKbGfjZ&df=mail163_letter#module=welcome.WelcomeModule|{}
授权码获取
image
image
授权码:JSgPesR3n82fA2N7
image
image
调用这个邮箱(1)导入邮箱模块
image
image
案例:image
image

posted @ 2026-05-25 16:09  刘sir金牌讲师  阅读(16)  评论(0)    收藏  举报