找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手

python + requests接口自动化测试

[复制链接]
# 第15讲  python + requests接口自动化测试


# 1、开发提供接口文档(如果没有接口文档,那就用fiddler或者f12抓包)

# 2、接口测试的定义
# 接口测试时针对系统于组件之间,或者模块于模块之间数据交互,传递,逻辑 依赖关系

# 3、接口自动化测试定义
# 通过自动化工具,编写代码实现对接口批量运行的测试

# 4、接口自动化测试的优点
# 相比ui自动化测试,接口自动化测试收益更大,容易实现,维护成本比较低,接口比较重要

# 5、接口自动化测试的流程
# 需求分析==》需求评审==》接口自动化测试计划==》设计接口用例==》脚本开发==》执行脚本==》结果分析

# 6、接口自动化测试会达到什么效果
# 1)提高效率,提高回归测试,场景覆盖 代码核查效率
# 2)解决在页面操作构造数据比较复杂时,可以用接口来实现

# 7、安装requests库
# 在dos窗口输入cmd ==》输入pip install requests  ==》安装完后在C:\Python37\Lib\site-packages查看

# 8、python 中常用作接口自动化的库又哪些?
# requests urllib urllib3 httplib

# 9、创建接口请求的3种方式?【重要】
# import requests     #导入requests库
# res = requests.post(url='url',data = 'data',json='json')
# res = requests.request('post',data = 'data',url='url',)
# res = requests.Session()     #保持上下文一直,在一个会话里面

# 10、get和post请求参数位置【重要】
# get 请求一般参数放在params里面
# post请求一般放在data或者json里面,如果content-type 是application/x-www-form-urlencode
# 类型是data,如果是application/json 类型则是json

# import requests

# 11、组建一个post请求【重要】
# 发一个接口请求基本组成有哪些?
# url地址   入参信息 headers 接口请求方式
# 1)定义一个url
# login_url = 'http://cms.duoceshi.cn/cms/manage/loginJump.do'
# # 2)登录参数
# login_data ={'userAccount':'admin','loginPwd':123456}

# # 3)请求头信息
# login_headers = {'Content-Type':'application/x-www-form-urlencoded'}
# res = requests.post(url=login_url,data=login_data,headers=login_headers)
# result= res.text    #拿到响应结果
# print(result)     #{"code":"200","msg":"登录成功!","model":{}}
# print(type(result))     #<class 'str'> 字符串格式
# print(res.headers)     #拿到响应头
# s = res.json()     #把接口返回的json字符串通过json函数转化为字典格式
# print(s)         #{'code': '200', 'msg': '登录成功!', 'model': {}}
# print(type(s))   #<class 'dict'> 字典格式
# print(res.cookies)       #拿到cookies值
# print(res.status_code)    #拿到状态码
# print(res.encoding)        #拿到编码格式

#第一种断言方法
# if s['msg']=='登录成功!':
#     print('接口联调成功')
# else:
#     print('接口联调失败')

#第二种断言方法
# assert s['msg']=='登录成功!'

# 12、组建get请求
# 发送一个get请求的的基本组成有哪些?
# url 地址   参数 接口请求方法
# 1)定义一个url
# login_url = 'http://cms.duoceshi.cn/cms/manage/loginJump.do'
# # 2)登录参数
# login_params={'userAccount':'admin','loginPwd':123456}
#
# res = requests.get(url=login_url,params=login_params)
# r = res.text
# print(r)     #{"code":"200","msg":"登录成功!","model":{}}
# print(type(r))   #<class 'str'>

# 13、封装在类里面
# import requests
# class Cms:
#     def __init__(self):
#         #创建一个session对象,作用保持上下文的管理,使登录之后的接口和登录接口保持在
#         # 一个会话里面
#         self.session = requests.Session()
#
#     def login(self):
#         login_url = 'http://cms.duoceshi.cn/cms/manage/loginJump.do'
#         login_data = {'userAccount': 'admin', 'loginPwd': 123456}
#         login_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = self.session.post(url=login_url,data=login_data,headers=login_headers)
#         r = res.text
#         print(r)
#
#     def queryUserList(self):
#
#         url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
#         data = {'startCreateDate':'','endCreateDate':'','searchValue':'',
#                'page':1}
#         headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = self.session.post(url=url,data=data,headers=headers)
#         r = res.text
#         print(r)
# if __name__ == '__main__':
#     c = Cms()
#     c.login()
#     c.queryUserList()

# 14 把上面的代码进行优化,用unittest框架进行管理
# import unittest
# import requests
# class Cms_Test(unittest.TestCase):
#     @classmethod
#     def setUpClass(cls) -> None:    #类方法的开始
#         cls.session = requests.Session()    #创建一个session对象作为类的一个属性
#
#     def setUp(self) -> None:     #方法的开始
#         print('...start...')
#
#     def tearDown(self) -> None:    #方法的结束
#         print(    '...end...')
#
#     def test01_login(self):
#         '''封装一个登录方法'''
#         login_url = 'http://cms.duoceshi.cn/cms/manage/loginJump.do'
#         login_data = {'userAccount': 'admin', 'loginPwd': 123456}
#         login_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = self.session.post(url=login_url,data=login_data,headers=login_headers)
#         r = res.json()
#         print(r)
#
#     def test02_queryUserLis(self):
#         url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
#         data = {'startCreateDate':'','endCreateDate':'','searchValue':'',
#                'page':1}
#         headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = self.session.post(url=url,data=data,headers=headers)
#         r = res.json()
#         print(r)
#
# if __name__ == '__main__':
#     unittest.main()

#作业
# 把剩下4条用例用unittest编写完,然后生成报告


# 15 关联接口1
# 关联接口的定义:上一个接口的返回值作为下一个接口的入参
# http://www.webxml.com.cn/WebServ ... /getSupportProvince ==》省份接口
# http://www.webxml.com.cn/WebServ ... asmx/getSupportCity
# ==》城市接口
# import requests
# import re
#
# class Provice:
#
#     def get_provice(self):
#         '''封装要给获取省份接口'''
#         url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince'
#         headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = requests.post(url=url,headers=headers)
#         r = res.text
#         all = re.findall('<string>(.+)</string>',r)
#         return all     #把返回的省份值给回函数调用处,谁调了这个函数谁就拿到了这个值,
#                     #all 使一个列表里面的值需要作为下一个接口入参
#
#     def get_city(self,index):
#         url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity'
#         data = {'byProvinceName':self.get_provice()[index]}   #self.get_provice()=all
#         headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#         res = requests.post(url = url,data=data,headers=headers)
#         r = res.text
#         print(r)
#
# if __name__ == '__main__':
#     p = Provice()
#     p.get_provice()
#     p.get_city(6)


# 关联接口二【重要】
# 获取uuid
# http://manage.duoceshi.com/auth/code

# 登录
# http://manage.duoceshi.com/auth/login
# {"username":"admin","password":"wYbwqxQk5+yEeC95YwzGtq6huWntl80i7AuF1OcmMkh0xYhwGcRg8+Ik99COTLsmh/FO1RZzDXzPjAH3hEDhOQ==","code":"8888","uuid":"${uuid}"
# }

# 商品分类接口
# http://manage.duoceshi.com/api/y ... mp;sort=sort%2Cdesc


import requests

class Test(object):
    '''获取uuid'''
    def code(self):
        url = 'http://manage.duoceshi.com/auth/code'
        res = requests.get(url=url)   #调用接口返回hui响应
        r = res.json()      #获取的响应转化为json格式(字典格式)
        self.uuid = r['uuid']   #字典通过uuid这个键拿到uuid的值
        # print(r)
        # print(self.uuid)
    def login(self):
        url = 'http://manage.duoceshi.com/auth/login'
        json = {"username":"admin","password":"wYbwqxQk5+yEeC95YwzGtq6huWntl80i7AuF1OcmMkh0xYhwGcRg8+Ik99COTLsmh/FO1RZzDXzPjAH3hEDhOQ==",
                "code":"8888","uuid":self.uuid}
        headers = {'Content-Type': 'application/json'}
        res = requests.post(url=url,json=json,headers=headers)
        r = res.json()               #获取的响应转化为json格式(字典格式)
        self.token = r['token']      #字典通过token这个键拿到token的值
        # print(r)
        # print(self.token)

    def select_goods(self):
        url = 'http://manage.duoceshi.com/api/yxStoreCategory?page=0&size=10&sort=sort%2Cdesc'
        headers = {'Authorization': self.token}
        res = requests.get(url=url,headers=headers)
        r = res.text
        print(r)


if __name__ == '__main__':
    t = Test()
    t.code()
    t.login()
    t.select_goods()


分享至 : QQ空间
收藏

0 个回复

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