当前位置: 首页 > news >正文

比较好的网页模板网站wordpress 数据库 改ip

比较好的网页模板网站,wordpress 数据库 改ip,微商运营,经典页游排行榜前十名引言:目前软件测试对测试人员的能力要求 业务测试能力:占比5-6成接口、自动化、性能测试能力:占比4-5成流程规范:1成(需要综合型的测试人才):业务能力、代码能力、开发思维(封装&…

引言:目前软件测试对测试人员的能力要求

  • 业务测试能力:占比5-6成
  • 接口、自动化、性能测试能力:占比4-5成
  • 流程规范:1成

需要综合型的测试人才):业务能力、代码能力、开发思维(封装)

接口测试工具:

  • postman+Newman+Jenkins
  •  jmeter+ant+Jenkins
  • apifox+apifox-cli+Jenkins

接口测试框架

  • python+requests+pytest+allure+yaml+logging+Jenkins框架

1、全面熟练Requests以及底层方法调用逻辑

        1.1:导入requests第三方库

import requests
  • python3中必须先安装requests模块,使用命令为pip install requests

         1.2:底层逻辑

第一层调用:

def get(url, params=None, **kwargs)url:接口地址params:参数,在get请求的url后面传的参数**kwargs:可变长度的字典def post(url, data=None, json=None, **kwargs)url:接口地址data:参数(表单/表格参数,对应postman的 x-www-form-urlencode)json:参数(raw,application/json)postman的四种传参方式:1.form-data(既有表单也有文件上传) files2.x-www-form-urlencode(纯表单格式)data3.raw(json:application/json)(传json格式的参数)json4.binary(application/octrent-stream)(二进制文件) data**kwargs:可变长度的字典def put(url, data=None, **kwargs):url:接口地址data:参数**kwargs:可变长度的字典
def delete(url, **kwargs):url:接口地址**kwargs:可变长度的字典

第二层调用:上面的4个方法其实都是调用的request方法,requests.request()

def request(method, url, **kwargs):

第三层调用:requests.request()调用的是session.request方法

session.request(method=method, url=url, **kwargs)

第四层调用:最终调用的是request() 

def request(self, method,                 请求方式url,                    请求路径params=None,            params参数data=None,              data参数headers=None,           请求头cookies=None,           cookies信息files=None,             文件上传auth=None,              鉴权timeout=None,           超时allow_redirects=True,   重定向proxies=None,           设置代理hooks=None,             钩子stream=None,            文件下载verify=None,            证书验证cert=None,              CA证书json=None):             json参数

         1.3:requests.request() 和 session.request() 的区别:

                我们实际工作中,一般都是用 session.request() 去进行接口测试

  • 前者的每个请求都是独立的
  • 后者会自动去关联所有请求的cookie信息。
class TestRequestApi():Authorization=""sess = requests.session()def test_login(self):url= "https://xxxx/wzlApp/usersLogin/login"headers ={"App-Version":"3.6.9"}data = {"phone":"RwP%2BH9D9DTgD1Qf0j7J%2B3A==","password":"kKe2zs5e7SF%2BuzDkBeFLLQ=="}# 通过session的方法调用res = TestRequestApi.sess.request("post",url=url,data=data,headers=headers)print(res.json())TestRequestApi.Authorization = res.json()['data']['token']

         1.4:Requests响应部分: 

        res.text:返回字符串形式的结果res.json():返回字典形式的结果res.content:返回字节类型的结果res.status_code:返回状态码res.reason:返回状态信息res.cookies:返回cookie信息res.encoding:返回编码格式res.headers:返回响应头res.request.xxx:得到请求数据

2、requests接口自动化测试实战

        2.1:接口关联的三个层次:

  1. 通过类变量保存中间变量实现接口关联 ----不建议用这个方式
  2. 通过单独的文件保存中间变量实现接口关联
  3. 极限封装成零代码的方式实现接口关联 

        2.2:接口关联的两种方式:

1. 正则提取

re.search() 通过正则匹配一个值,用下标[1]取值,如没有匹配到则返回None

re.findall() 通过正则匹配多个值,返回的是list,用下标取值,如没有匹配到则返回None

一般在text文本中,用正则提取:

第一个是正则:'token': '(.*?)'

第二个是字符串对象:res.json()

通过下标[1]提取对应的值

token = re.search("'token': '(.+?)'",res.text).group(1)
print("这是正则提取出来的:"+token)

 re 需要先导包,再引入

2. JsonPath提取 

jsonpath.jsonpath()  返回的是list,用下标取值,如没有匹配到则返回None

        $ 表示根目录
        如:就在根目录下,则直接用.名称提取:res.json(),"$.data"
               到前面的res.json()对象中,通过表达式:"$.data"取值
        如:有嵌套的话:res.json(),"$.[data][token]"

        

        通过下标提取对应的值

        print(data[0])

 jsonpath需要先导包,再引入

        data = jsonpath.jsonpath(res.json(),"$.data[token]") # $ 表示根目录# 就在根目录下,则直接用.名称提取:res.json(),"$.data"# 到前面的res.json()对象中,通过表达式:"$.data"取值# 有嵌套的话:res.json(),"$.[data][token]"# 通过下标提取对应的值print(data[0])

import requests
import jsonpathclass TestRequestApi():Authorization=""def test_login(self):# self,代表当前类的对象# 方法通过对象调用     TestRequestApi().test_login()# method: posturl= "https://xxxx/wzlApp/usersLogin/login"headers ={"App-Version":"3.6.9"}data = {"phone":"RwP%2BH9D9DTgD1Qf0j7J%2B3A==","password":"kKe2zs5e7SF%2BuzDkBeFLLQ=="}res = requests.post(url=url,data=data,headers=headers)print(res.json())TestRequestApi.Authorization = res.json()['data']['token']# $ 表示根目录# 就在根目录下,则直接用.名称提取:res.json(),"$.data"# 到前面的res.json()对象中,通过表达式:"$.data"取值# 有嵌套的话:res.json(),"$.[data][token]"data = jsonpath.jsonpath(res.json(),"$.data[token]")print("-----登录-----哈哈哈哈哈哈哈哈")print("这是直接获取的token:" + TestRequestApi.Authorization)print(data[0])def test_notice(self):url= "https://xxxx/wzlApp/users/insertUserFeedback"headers ={"App-Version":"3.6.9","Authorization": TestRequestApi.Authorization}data = {"feedback":"通过接口自动化脚本提交的意见反馈,数字符--xxxx---测试。。通过接口自动化脚本提交的意见反馈,数字字符--xxxxx---测试。。"}res = requests.post(url=url,data=data,headers=headers)print("-----意见反馈-----哈哈哈哈哈哈哈哈")print(res.json())def test_upload(self):url = "https://xxxx/commonApi/upload/uploadPrivate"headers = {"App-Version": "3.6.9","Authorization": TestRequestApi.Authorization}data = {"file":open("D:/Scripts/workspace/demo/results/image/logo.png","rb")}res = requests.post(url=url, files=data, headers=headers)print("-----上传文件接口-----哈哈哈哈哈哈哈哈")print(res.json())

3、接口自动化测试框架的封装(统一请求封装)

1. 去重很多重复的、冗余的代码;

2. 实现统一的异常处理以及日志监控 

PS: 封装的一般放在common包中~~~ requests_util.py(自定义)

---当该py文件被引用,或者类被其他模块引用时,意味着导入这个类的所有用例,会导致用例的执行冗余;

通过类变量保存中间变量实现接口关联 ----不建议用这个方式(见上  2.1)

解释:所以变量一般不要定义为类变量,如果该变量被其他模块导入并执行时,也会执行该类的用例。

---可能写的有点乱,但希望意思能表达清晰。

http://www.yayakq.cn/news/874690/

相关文章:

  • 中国网站空间wordpress 公网贷款
  • 3000ok新开传奇网站石家庄网站快速优化排名
  • 地方文明网站建设措施流量打不开网站怎么办
  • 刘金鹏做网站wordpress 豆瓣主题
  • 女人与狗做网站办公家具
  • 做酸菜视频网站岳阳公司网站开发
  • 网站动态页面怎么做wordpress打赏key插件
  • 购物网站建设 优帮云公司注册域名怎么申请
  • 学生自做网站优秀作品新手学做网站电子版
  • 网站开发小组沈阳蓝德网站建设
  • 网站内链怎么删除种子资源地址
  • o2o网站建设策划新闻热点事件2021(最新)
  • 东莞百度代做网站联系方式企业官方网站怎么写
  • 代理怎么引流推广seo网络推广经理招聘
  • 服务好的网站开发郑州微信网站制作
  • 昆明专业做网站网站备案个人信息
  • 做网站要用到哪些架包鄂州网站建设设计
  • 做网站卖产品投资大嘛滁州58同城网站怎么做
  • 有没有专业做盐的网站在中国怎么做国外网站
  • 网站建设列表网wordpress询盘插件
  • 网站 用户登陆 模板品牌网站建设十a小蝌蚪
  • 小企业网站建设的服务机构网站内容建设机制
  • 美容美发网站源码五百丁简历官网
  • 电子书网站用dz还是wordpresswordpress更换图标
  • 优秀网站开发网站开发与设计实训总结两千字
  • 贵州企业品牌网站建设非遗网页设计作品欣赏
  • 北京网站制作推广wordpress带视频
  • 湖南网站建设网会外语和做网站
  • wordpress修改主题头部图片seo网上培训多少钱
  • 网站建设外包必须注意几点深圳前十名代运营公司