请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手

关联接口+接口自动化框架+python中get请求和post请求

[复制链接]
查看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包---->存放模块与函数的(邮件,报告模块)








44b9d85c464c9d4b95a43f695d87997.png
78c8e31f86e71ab3fc731aaa6e5a7eb.png
ae71bc052c700d6d99631860e676cd9.png
分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册