多测师拱墅校区肖sir_高级金牌讲师_接口测试之python+request(8.2)


一、封装接口

案例1:

import requests
s=requests.session()
class Cms(object):
def __init__(self):
pass
def dl(self):
url1="http://cms.duoceshi.cn/cms/manage/loginJump.do"
head1={"Content-Type":"application/x-www-form-urlencoded"}
data1={"userAccount":"admin","loginPwd":"123456"}
dx=s.post(url=url1,data=data1,params=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)

def dl2(self):
url1 = "http://cms.duoceshi.cn/cms/manage/loginJump.do"
head1 = {"Content-Type": "application/x-www-form-urlencoded"}
data1 = {"userAccount": "admin", "loginPwd": "1234567"}
dx = s.post(url=url1, data=data1, json=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)

def yhzx(self):
url1="http://cms.duoceshi.cn/cms/manage/saveSysUser.do"
head1={"Content-Type": "application/x-www-form-urlencoded"}
data1={"id":"","userName":"123123123","userSex":"1","userMobile":"13477778811","userEmail":"111111%40qq.com","userAccount":"123123123","loginPwd":"123123123","confirmPwd":"123123123"}
dx= s.post(url=url1, data=data1, json=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)

def yhzx1(self):
url1="http://cms.duoceshi.cn/cms/manage/saveSysUser.do"
head1={"Content-Type": "application/x-www-form-urlencoded"}
data1={"id":"","userName":"123123123","userSex":"1","userMobile":"13477778811","userEmail":"111111%40qq.com","userAccount":"123123123","loginPwd":"123123123","confirmPwd":"123123123"}
dx= s.post(url=url1, data=data1, json=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)

def lanmu(self):
url1 = "http://cms.duoceshi.cn/cms/manage/saveModuleCategory.do"
head1 = {"Content-Type": "application/x-www-form-urlencoded"}
data1 = {"categoryName":"徐凯yo","categoryCode":"徐凯123","keyDesc": "徐凯"}
dx = s.post(url=url1, data=data1, json=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)

def shanchuyonghu(self):
url1 = "http://cms.duoceshi.cn/cms/manage/deleteByIds.do"
head1 = {"Content-Type": "application/x-www-form-urlencoded"}
data1 = {"ids": "161197,161195"}
dx = s.post(url=url1, data=data1, json=head1)
print(dx.text)
print(dx.headers)
print(dx.cookies)
print(dx.url)
print(dx.status_code)
print(dx.request)


if __name__ == '__main__':
f=Cms()
f.dl()
f.dl2()
f.yhzx()
f.yhzx1()
f.shanchuyonghu()

=======================================
案例2:
import requests
session = requests.session()#创建一个s对象来保持上下接口的关联
class Cms(object):
def __init__(self):
pass
def dl(self):
url1 = "http://cms.duoceshi.cn/cms/manage/loginJump.do"
date1 = {'userAccount': 'admin', 'loginPwd': '123456'}
h1 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = session.post(url=url1, data=date1, json=h1)
print(dx.text) # 以文本的形式显示响应码
# print(dx.headers) # 请求头
# print(dx.cookies) # cookies值
# print(dx.url) # 接口路径
# print(dx.status_code) # 状态码 #200
# print(dx.request) # 请求方式
def xgmm(self):
url2 = "http://cms.duoceshi.cn/cms/manage/updateLoginPwd.do"
date2={'id': '160742','loginPwd': '123123','loginPwd2': '123123'}
h2 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = session.post(url=url2, data=date2, json=h2)
print(dx.text) # 以文本的形式显示响应码
# print(dx.headers) # 请求头
# print(dx.cookies) # cookies值
# print(dx.url) # 接口路径
# print(dx.status_code) # 状态码 #200
# print(dx.request) # 请求方式
def cxyh(self):
url3 = "http://cms.duoceshi.cn/cms/manage/queryUserList.do"
date3={'startCreateDate':'', 'endCreateDate':'', 'searchValue':'', 'page': '1'}
h3= {"Content-Type": "application/x-www-form-urlencoded"}
dx = session.post(url=url3, data=date3, json=h3)
print(dx.text) # 以文本的形式显示响应码
# print(dx.headers) # 请求头
# print(dx.cookies) # cookies值
# print(dx.url) # 接口路径
# print(dx.status_code) # 状态码 #200
# print(dx.request) # 请求方式
def cxlm(self):
url4 = "http://cms.duoceshi.cn/cms/manage/findCategoryByPage.do"
date4={'parentId':'', 'categoryName':'', 'page': '1'}
h4 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = session.post(url=url4, data=date4, json=h4)
print(dx.text) # 以文本的形式显示响应码
# print(dx.headers) # 请求头
# print(dx.cookies) # cookies值
# print(dx.url) # 接口路径
# print(dx.status_code) # 状态码 #200
# print(dx.request) # 请求方式
def cxzx(self):
url5= "http://cms.duoceshi.cn/cms/manage/findArticleByPage.do"
date5={'categoryId': '','startCreateDate':'', 'endCreateDate': '','articleTitle': '','page': '1'}
h5 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = session.post(url=url5, data=date5, json=h5)
print(dx.text) # 以文本的形式显示响应码
# print(dx.headers) # 请求头
# print(dx.cookies) # cookies值
# print(dx.url) # 接口路径
# print(dx.status_code) # 状态码 #200
# print(dx.request) # 请求方式
if __name__ == '__main__':
c=Cms()
c.dl()
c.xgmm()
c.cxyh()
c.cxlm()
c.cxzx()
==============================================================
关联接口:
import  requests #导入requests模块
import re #导入re模块
class Gljk(): #定义一个类
def __init__(self): #定义构造函数
pass
def sf(self): #定义一个函数,一个接口
url1="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince"#接口路径
h= {"Content-Type": "application/x-www-form-urlencoded"}#接口请求头
dx=requests.get(url=url1,params=h)#接口get请求
print(dx.text)#打印接口的响应体,以text格式
a=re.findall('(.+?)',dx.text) #通过re正则提取响应体内容
print(a)
return a #返回值,下个接口要调用
def cf(self):#定义城市接口
s=self.sf()#创建对象来调用省份接口
url2="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity" #城市接口的路径
data2={'byProvinceName':s[2]}#城市接口的请求参数,请求参数来自于上一个接口提取出来内容,根据索引取值
h2 = {"Content-Type": "application/x-www-form-urlencoded"}#请求头
dx2=requests.post(url=url2,data=data2,json=h2)#调用方式
print(dx2.text)#打印城市接口
if __name__ == '__main__':
gl=Gljk() #创建一个类的对象
gl.sf() #通过对象调用省份接口
gl.cf() ##通过对象调用城市接口
面试题:在python中如何实现接口关联关系?
==============================================================
unittest框架:
案例:
import  unittest
import requests
from time import *
from aa.HTMLTestRunner3_New import HTMLTestRunner
class Cms(unittest.TestCase): #定义一个类继承单元测试框架中testcase类
@classmethod
def setUpClass(cls): #定义类的方法,类开始
cls.s=requests.session()#s是一个类变量作用是保持上下接口的会话和关联
@classmethod
def tearDownClass(cls):#定义类的结束,
pass
def setUp(self): #方法开始
pass
def tearDown(self):#方法结束
pass
def test1(self):
url1 = "http://cms.duoceshi.cn/cms/manage/loginJump.do"
date1 = {'userAccount': 'admin', 'loginPwd': '123456'}
h1 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = self.s.post(url=url1, data=date1, json=h1)
print(dx.text) # 以文本的形式显示响应码
def test2(self):
url2 = "http://cms.duoceshi.cn/cms/manage/updateLoginPwd.do"
date2 = {'id': '160742', 'loginPwd': '123123', 'loginPwd2': '123123'}
h2 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = self.s.post(url=url2, data=date2, json=h2)
print(dx.text) # 以文本的形式显示响应码
def test3(self):
url3 = "http://cms.duoceshi.cn/cms/manage/queryUserList.do"
date3 = {'startCreateDate': '', 'endCreateDate': '', 'searchValue': '', 'page': '1'}
h3 = {"Content-Type": "application/x-www-form-urlencoded"}
dx = self.s.post(url=url3, data=date3, json=h3)
print(dx.text) # 以文本的形式显示响应码
if __name__ == '__main__':
# unittest.main() #第一种方法
# tj=unittest.TestSuite() #第二种方法
# # tj.addTest(Cms("test1")) #添加单个用例
# tj.addTests([Cms("test1"),Cms("test2")]) #添加多个用例
# r=unittest.TextTestRunner()
# r.run(tj)
# lj=r"C:\Users\Administrator\PycharmProjects\gs0002\aa"#第三种方法
# d=unittest.TestLoader().discover(start_dir=lj,pattern='bb*.py')
# r=unittest.TextTestRunner()
# r.run(d)
lj=r"C:\Users\Administrator\PycharmProjects\gs0002\aa"#第三种方法
d=unittest.TestLoader().discover(start_dir=lj,pattern='bb*.py')
bglj=r"C:\Users\Administrator\PycharmProjects\gs0002\aa"
new=strftime("%y-%m-%d %H-%M-%S")
filename=bglj+"/"+str(new)+"_api.html"
f=open(filename,"wb")
r=HTMLTestRunner(stream=f,title="接口自动化测试报告",description="接口执行的情况如下" )
r.run(d)

==============================================================
接口分层:po设计模式

(1)新建一个项目:

(2)新建6个包

 第一层:config层

存放所有接口的入参数据:

#登录接口的参数
url1 = "http://cms.duoceshi.cn/cms/manage/loginJump.do"
date1 = {'userAccount': 'admin', 'loginPwd': '123456'}
h1 = {"Content-Type": "application/x-www-form-urlencoded"}
#修改秘密接口
url2 = "http://cms.duoceshi.cn/cms/manage/updateLoginPwd.do"
date2 = {'id': '160742', 'loginPwd': '123123', 'loginPwd2': '123123'}
h2 = {"Content-Type": "application/x-www-form-urlencoded"}
#查询用户接口
url3 = "http://cms.duoceshi.cn/cms/manage/queryUserList.do"
date3 = {'startCreateDate': '', 'endCreateDate': '', 'searchValue': '', 'page': '1'}
h3 = {"Content-Type": "application/x-www-form-urlencoded"}

 第二层:

api包:组建接口

import  requests
from config.cs import *
s=requests.session()
class Cms(object):
def __init__(self):
pass
def dl(self):
dx=s.post(url=url1,data=date1,json=h1)
print(dx.text)
def xgmm(self):
dx=s.post(url=url2,data=date2,json=h2)
print(dx.text)
def cxyh(self):
dx = s.post(url=url3, data=date3, json=h3)
print(dx.text)
if __name__ == '__main__':
c=Cms()
c.dl()
c.xgmm()
c.cxyh()
第三层:
report 报告层

 第四个包:

testcase 包存放用例和管理用例

import  unittest
from api.zjapi import Cms
class Yl(unittest.TestCase):
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
def test1(self):
jg1=Cms().dl()
def test2(self):
jg2=Cms().xgmm()
def test3(self):
jg3=Cms().cxyh()
# if __name__ == '__main__':
# unittest.main()

第五个包:

 邮件模板更改:

 第六包:run包

运行所有的用例

import unittest
from time import *
from utils.HTMLTestRunner3_New import HTMLTestRunner
from utils.mail3 import SendMail
import os
#项目路径
xm_path=os.path.join(os.path.abspath(os.path.dirname(os.getcwd())))
print(xm_path)
#用例路径
yl_lj=os.path.join(os.path.abspath(os.path.dirname(os.getcwd())),"testcase")
print(yl_lj)
#报告路径
bg_lj=os.path.join(os.path.abspath(os.path.dirname(os.getcwd())),"report")
print(bg_lj)
now=strftime("%y-%m-%d %H-%M-%S")
filename=bg_lj+"/"+str(now)+"_api.html"
def bg(name):
d=unittest.defaultTestLoader.discover(start_dir=yl_lj,pattern=name)
f=open(filename,"wb")
r=HTMLTestRunner(stream=f,description="用例执行情况",title="接口自动化框架测试测试报告")
r.run(d)
def yj():
sm=SendMail(send_msg=filename,attachment=filename)
sm.send_mail()
if __name__ == '__main__':
bg("yl*.py")
yj()

相关