一、以登录为例,cookie验证
1.打开登录页面--输入用户名密码--点击登录--前端进行密码加密--调用登录接口,传入用户名和加密后的密码--和数据库进行验证
2.打开登录页面--输入用户名密码--点击登录--调用登录接口,传入用户名和密码,并将密码加密--和数据库进行验证
一般都用第二种方法。前端加密不安全,使用f12就能看出系统使用哪种加密方式,并且加密方式若有改动时改动较大。一般复杂操作放到后端
封装一个登录的类libs\login.py
class Login:
def login(self,Data,mode=True): #登录方法
# URL路径
url=f'{HOST}'
'''
data:一般是表单格式
json:json.单引号字典,双引号json
files:文件上传接口
params:参数会放到url路径里 ?后边
'''
resp = requests.post(url, Data)
# print(resp.text.encode('utf8').decode('unicode-escape'))
if mode:#获取cookie
session = requests.Session()
cookies_jar = session.post(url, Data).cookies
cookie = requests.utils.dict_from_cookiejar(cookies_jar)
return cookie
else:#获取响应数据
#查看响应unicode转码
return resp.text.encode('utf8').decode('unicode-escape').replace("\/", "/") #json字符串
二、Yaml基本语法。需要安装pyYaml
冒号后边要加空格
data\loginCase.yaml
- #该符号表示列
url:
method: POST
- #test_01用例
detail: 用户名密码都正确
data:
username: "xiajing001"
password: "123456"
resp:
code: 0
msg: "登录成功"
- #test_02用例
detail: 用户名为空,密码正确
data:
username: ""
password: "123456"
resp:
code: 1
msg: "帐号或密码不正确"
tools\yamlControl.py
import yaml
def get_yaml_data(fileDir):
#1.读取文件操作
fo = open(fileDir,'r',encoding='utf-8') #file_Object
#2.使用yaml方法获取数据
res = yaml.load(fo,Loader=yaml.FullLoader)
fo.close()
#获取公共信息
info = res[0]
return res
if __name__ == '__main__':
res = get_yaml_data('../data/loginCase.yaml')
print(res)
三、先不使用pytest框架写测试用例的执行
testCase\test_login.py
from Interface.tools.yamlControl import get_yaml_data
from Interface.libs.login import Login
import json
#执行用例
#获取用例数据
for res in get_yaml_data('../data/loginCase.yaml')[1:]:
# print(res)
#调用接口方法,获取响应数据
respData = Login().login(res['data'],False)
# print(respData)
resp = json.loads(respData) #将string转化为dict
# print(resp["code"])
#断言 实际响应与预期做对比
if res['resp']['code'] == resp['code'] :
print('---用例通过---')
四、使用pytest框架
tools\yamlControl.py
import yaml
def get_yaml_data(fileDir):
resList = [] #存放结果[(请求1,期望响应1),(请求2,期望响应2)]
#1.读取文件操作
fo = open(fileDir,'r',encoding='utf-8') #file_Object
#2.使用yaml方法获取数据
res = yaml.load(fo,Loader=yaml.FullLoader)
fo.close()
#获取公共信息,自己封装基类可以使用
info = res[0]
del res[0]
for one in res:
resList.append((one['data'],one['resp']))
return resList #存放结果[(请求1,期望响应1),(请求2,期望响应2)]
if __name__ == '__main__':
res = get_yaml_data('../data/loginCase.yaml')
for one in res:
print(one)
testCase\test_login.py
from Interface.tools.yamlControl import get_yaml_data
from Interface.libs.login import Login
import json
import pytest
'''
数据驱动--读取用例数据--给框架执行
1.用例的请求数据
2.用例的期望结果
'''
#登录接口-测试类封装
class TestLogin:
# 测试方法
@pytest.mark.parametrize('inBody,expData',get_yaml_data('../data/loginCase.yaml'))#数据驱动方法
def test_login(self,inBody,expData):
# 调用业务层代码
res = Login().login(inBody,False)
resp = json.loads(res) # 将string转化为dict
# 断言
# print(resp['msg'])
# print(expData['msg'])
assert resp['msg'] == expData['msg']
if __name__ == '__main__':
pytest.main(['test_login.py','-sq']) #-s输出打印信息,-q简化
五、allure报告
|