查看postman请求日志
view -- show postman console
cookie、session和token的区别:
cookie---- (cookie存储在客户端上)
-cookie是服务器产生,发给客户端浏览器保存(cookie具有更新性)
-cookie不是很安全
session (session存储在服务器上),session翻译为会话
-session也就是cookie,cookie的作用就是保存session的。session是服务器审核客户端的“身份信息”,cookie是保存的方式
token令牌,服务器返回给到客户端的)
目的: token的目的是为了减轻服务器的压力,减少频繁的查询数据库
-在登录界面获取token后,把token设置成全局变量,后面的接口访问不再需要用户名与密码,
原理:
1.第一次登入成功之后,服务器就会产生一个token值,而这个值就会被服务器保存,同时将token值发送给客户端。
2.第二次客户端拿到token值后要进行保存
3.当客户端再次发起网络请求时(该请求不是登录请求,是登录之后的请求),在该次请求中token值会发送给服务器。
4.服务器接受到客户端的请求后,会进行token值的对比。当token值一致时,说明已经登入成功,用户处于登入状态;当token值不一致时,说明原来登入的信息已经失效,让用户重新登入。
postman导入的用例格式
python测接口测试
1.安装requests库 requests模块是用来做接口测试的库
-pycharm中解释器安装
-或者输入pip insatll requests
2.组建接口
-url请求地址
-请求方式get,post
-请求类型
-请求的入参
params模块
params库中有三个函数:data,json,params
post请求中使用:datat与json
get请求使用:params,这个函数用于传递测试接口所用的参数;
接口的返回值操作
text:获取接口返回值的文本格式-----print(jmj.text)
json:获取接口返回值的ison格式------print(jmj.json())
status_code:获取接口返回值的状态码-----print(jmj.status_code)
headers:获取返回完整的响应头信息-----print(jmj.headers)
url:获取返回的url地址------print(jmj.url)
例子:
import requests
dl_url ='http://192.168.100.191:8080/cms/manage/loginJump.do'
data1 ={'userAccount': 'admin','loginPwd': 123456}
jmj = requests.get(url=dl_url,params=data1,)
print(jmj.text) #{"code":"200","msg":"登录成功!","model":{}}
print(jmj.json()) #{'code': '200', 'msg': '登录成功!', 'model': {}}
print(jmj.status_code) #200
print(jmj.headers) #{'Content-Type': 'application/json;charset=UTF-8'}
print(jmj.url) #得到地址
接口测试两种请求方式(post请求和get请求),有3种写法
-post请求方式
import requests
post_url ='http://192.168.100.191:8080/cms/manage/loginJump.do'
data2 ={'userAccount': 'admin','loginPwd': 123456}
header ={'Content-Type': 'application/json;charset=UTF-8'}
# jmj =requests.post(url=post_url,data=data2,json=header) #请求方法1
# print(jmj.text)
# jmj2 =requests.request('post',url=post_url,data=data2,json=header) #请求方法2
# print(jmj2.text)
jmj3 =requests.session() #请求方法3
jmj4 =jmj3.post(url=post_url,data=data2,json=header)
print(jmj4.text)
get请求方式
import requests
dl_url ='http://192.168.100.191:8080/cms/manage/loginJump.do'
data1 ={'userAccount': 'admin','loginPwd': 123456}
header1 ={'Content-Type': 'application/json;charset=UTF-8'}
# # jmj = requests.get(url=dl_url,params=data1,) #请求方法1
# # print(jmj.text)
# jmj2 =requests.request('get',url=dl_url,params=data1) ##请求方法2
# print(jmj2.text)
jmj3 =requests.session() #请求方法3
jmj4 =jmj3.get(url=dl_url,params=data1)
print(jmj4.text)
运行一个文件多条用例(需要创建类)
import requests #导入模块,requests模块是用来做接口测试的库
import unittest
class cms_ap1(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.session = requests.session() #定义session全局变量
@classmethod
def tearDownClass(cls) -> None:
print('类的结束')
def setUp(self) -> None:
print('开始运行')
def tearDown(self) -> None:
print('结束运行')
def test001(self):
print('用例1')
def test002(self):
print('用例2')
if __name__ == '__main__':
unittest.main()
运行多个文件用例(1,2,3文件是用例,另外准备一个单独文件汇总测试)
import unittest
from HTMLTestRunner3_New import HTMLTestRunner #跑用例模块
import time
import Email
case_path = '文件储存路径'
dis =unittest.defaultTestLoader.discover(start_dir=case_path,pattern='jiekou0*.py')
time1 =time.strftime('%Y-%m-%d-%H-%M-%S')
rename =time1+'report.html'
dir =open(rename,'wb')
runner =HTMLTestRunner(stream=dir,title='cms后台测试',tester='贾明杰',description='用例情况如下')
runner.run(dis)
email =Email.Sum_Mail(rename,rename)
email.send_mail()
关联接口(python)
-第一次登录接口请求得到了token
-第二次其他接口请求需要token值才能访问,否则报错
第一次访问得到的token值设成全局变量
import requests #导入接口测试库
import re #导入正则法则模块
class Yshop(object): #定义类
def login(self): #定义登录接口方法
login_url ='http://150.158.171.135:8008/api/login' #定义url值
headers ={'Content-Type': 'application/json'} #定义请求头类型
json ={'password': "123456", #添加请求参数
'spread':'',
'username': '19866021706'}
reponse =requests.post(url=login_url,json=json,headers=headers) #组建接口
res =reponse.text #响应体返回值变量
tokens =re.findall('"token":"(.+)"},"time', res) #通过正则取token值。找到 "token": 与},之间的token值,
.是元字符,带个+号表示多个值。
global token1 #定义全局变量
token1 ="Bearer "+tokens[0] #给全局变量赋值
def user(self):
user_url='http://150.158.171.135:8008/api/user/edit'
header ={'Authorization': token1, #这里原来的加密token值改成token全局变量
'Content-Type': 'application/json'}
json2 ={'avatar': "https://image.dayouqiantu.cn/5e79f6cfd33b6.png",
'nickname': "贾明杰1"}
reponse =requests.post(user_url,json=json2,headers=header)
print(reponse.text)
if __name__ == '__main__':
y=Yshop() #建立类对象
y.login()
y.user()
接口自动化框架设计
-把传入接口参数,组建测试用例,执行测试用例和发送报告放一个py文件会导致使用不准确,所以需要分层管理。
-接口分层需要组建6个包,配合使用。
cms_api包---->组建接口请求
import requests #导入测试模块
from config.config import * #导入config包里config文件所有用例
class Cms(): #定义类
def __init__(self): #类变量
#定义全局session保持会话
self.session =requests.session()
def login(self): #登录接口用例
reponse =self.session.post(url=login_url,data=login_data,json=login_header) #参数变量来自config包
return reponse.json() #响应体json格式给login返回值,给testcase包使用
if __name__ == '__main__': #主函数
c =Cms() #类对象
print(c.login()) #{'code': '200', 'msg': '登录成功!', 'model': {}}
-config包----->存放接口入参信息
地址:url
参数:data
请求头信息:headers
-report包---->存放接口报告的
-run_allcase包--->运行所有测试接口(最后另建立总文件执行所有用例生成报告与邮件)
-testcase包--->编写接口测试用例(unittest框架组建类跑用例)
import unittest #测试框架
from cms_api.cms_api import Cms #导入cms_api包里cms_api文件的Cms类
class Cms_Test(unittest.TestCase): #基层基类
@classmethod
def setUpClass(cls) -> None:
cls.cms =Cms() #给定义类变量
def test01_login(self):
result =self.cms.login() #cms变量.login登录接口(联想来自cms_api)
self.assertEqual(result['msg'],'登录成功!') #断言:通过索引msg的值与从cms_api响应体复制来的'登录成功!'值断言
print(result)
if __name__ == '__main__':
unittest.main()
utils包---->存放模块与函数的(邮件,报告模块)
|
|