1:json模块的使用
字典是一种存储类型,json是一种格式(完全不同) json.loads()函数是将json字符串转化为字典(dict) json.dumps()函数是将字典转化为json字符串 json.dump()和json.load()主要用来读写json文件函数
2:接口自动化测试概叙
什么是接口测试: 前后端不分离:淘宝网站(响应的数据在页面,访问响应的数据是html的)返回的是一整个html(做接口难,需要解析数据,因为返回的是整个html代码) 前后端分离,前端和后端通过api(接口交互),返回的只是数据本身(App可能并不需要后端返回一个HTML网页) (市面上主流项目前后端分离走json格式的) 发请求以json数据格式返回的,通过api接口协议前后端进行交互的
3:swagger工具能导出接口文档的
4:前端页面:
安卓或者ios app,网页统层为前端展示(数据展示和用户的交互), 前端框架:html,js,css,vue(展示漂亮),nodejs
5:后端:
后台数据处理,校验,下订单等等业务处理(c语言,c++,java(大型都走java),go,python)
6:前端和后端的数据交互(接口)通过接口
有些问题前端可能屏蔽,但是后端没有做限制,校验都没有做的,绕过前端,抓包发请求的方式攻破后端,项目可能出现问题
7:接口的概念
接口是应用程序之间的相互调用 接口是实体或者软件提供给外界的一种服务 软件接口:api,微信提现调用银联的接口实现数据交互 一种是内部接口: 1:方法与方法之间的交互 2:模块与模块之间的交互 一种调用对外部包装的接口 web接口:http,https,webserver(目前大多做web接口) 应用程序接口:soket接口 走的tcp/ip协议的 数据库接口:
8:常用的接口方式(协议)
1:webservice :走soap协议通过http传输,请求报文和返回报文都是xml格式的,xml格式(soapui抓包)老项目(政府和银行) 还要解析数据,麻烦,而且速度可能有降低,通信比较严格 2:http协议:超文本传输协议(百分之70-80都走的http协议) get post delete put四种主要的请求方式 3:https协议:并非是应用层的一种新协议,只是http通信接口部分用ssl和tls协议代替而已
9:什么是接口测试:
项目需需求 案例:一个登录接口 场景:产品上规定用户名6-10个字符串下划线 测试人员在前端做了校验,通过 后端开发人员没有做校验 风险:直接抓包取篡改你的接口,然后绕过验证,通过sql注入直接随意登录 危害:公司损失 接口测试是市场的主流需求
10:接口测试目标
可以发现客户端没有发现的bug,(隐藏的bug)(提交订单,前端屏蔽了后端没有,可以随便乱填的) 及早爆出风险(保证质量正常上线) 接口稳定了,前端随便改 最重要加内存系统安全性,稳定性
11:接口自动化测试概叙(怎么做) (接口跑的是协议层。ui定位的是元素)
1:项目业务(了解项目业务) 2:接口文档(api文档) 3:接口用例 4:自动化脚本(根据接口文档和接口用例) 5:pytest框架 重点 6:调试执行 重点 7:allure报告 8:结果分析 9:持续集成
12:http协议概述
一:http响应报文包含四部分:如上图 1:请求行:主要包含信息:POST (请求方法)/search(请求url) HTTP/1.1 (http协议及版本)
二:http请求报文包含四部分:如上图 1:请求行: POST (请求方法)/search(请求url) HTTP/1.1 (http协议及版本) 2:请求头 请求头,项目可能有防爬操作,python等语言请求被屏蔽,所以可能需要加头伪装 3:请求空行 4:请求体(请求正文)
三:通过谷歌浏览器F12分析http报文(如上图) Host : 主机ip地址或域名 User-Agent :用户客户端,比如说操作系统或者浏览器的版本信息, (客户端相关信息,如操作系统,浏览器信息)可能拿到User-Agent去做兼容的, 服务器拿到User-Agent服务器生成兼容客户端的文本 浏览器需要服务器发回兼容我浏览器的版本,服务器拿到信息作一个判断, Accept: 接收的意思,指定客户端接收信息的类型,(我想接收的是一个图片还是html还是json还是一个xml文档告诉服务器,服务器对应返回) 如imag/jpg/,text/html,有时候我们一个接口给很多系统公司去用,这个系统可能想要的xml就告诉服务器你给我传递xml数据 有些公司想要的是json数据(主流都是json格式)告诉服务器你给我json 这里可以在请求头域设置Accept告诉服务器我需要的内容的格式 Accept-Charset :客户端接收的字符集,客户端接收字符集告诉服务器:如gb2312,iso-8859-1,utf-8 Accept-Encoding: 可接受内容的编码,如:gzip压缩格式, deflate (为了方便进行内容的传输,节省传输时间,提供传输效率,可能进行一些编码和压缩,节省传输流量) Accept-Language:接受的语言,如Accept-Language: zh-CN,zh;q=0.9 ,做国际化可以识别这里,中文环境给我中文数据 Authorization:客户端提供给服务端,进行权限认证的信息(进行权限认证的,请求的话有个鉴权的这样的功能, 不是说想什么服务器就发给什么,有可能需要进行一些基本的认证,认证信息可以放在这里) Cookie:携带的cookie信息 非常重要的字段(我登录成功之后就会在本地保存一些cookie,保存一些文本, 下一个请求的时候直接把cookie发给服务器,告诉服务器我已经登录了,有一个证明在这里cookie携带回去)做校验的 Referer:当前文档的URL,即从哪个链接过来的(我这个请求到底从那个连接过来的) 比如:Referer: http://test.lemonban.com/ningmengban/app/login/login.html登录的这个连接 是从login/login.html从我们这个网站的首页来的,防止盗链,把这个链接盗取了用到自己网站去, 或者说可以统计我这样的一个请求到底来自于那个页面, Content - Type:请求体内容类型,请求构建以什么形式传递参数的,如:x-www-form-urlencoded表单形式 (往服务器提交内容,告诉服务器我提交的内容是什么格式的,表单,json格式,xml格式) Content - Length:数据长度 ,(提交内容的数据长度有多少个字节告诉服务器,防止进行请求的篡改) Cache-Control:缓存机制,如Cache-Control:no-cache :别给我缓存 ,有些请求会缓存到本地的, Pragma:防止页面被缓存,和Cache-Control:no-cache作用一样(1.0中间的,为了兼容和1.0)
四:cookie 第一次访问网站,如果网站有cookie机制,访问第一个请求的时候返回set-cookie set-cookie设置cookie值,通过响应数据的头,响应头里面通过set-cookie把值给客户端,获取cookie里面对应的值
13:fiddler(抓包工具的使用)
fidder的使用技巧(能抓包,查看抓包数据): 能抓取https要设置证书:(免费的,开源的,能抓很多对应消息,app的也可以) fidder是一款免费,灵活,操作简单,功能强大的http代理工具,是目前最常用的http抓包工具之一 可以抓取所有的http/https包,过滤会话,分析请求详细内容,伪造客户端请求,篡改服务器响应,重定向,网络限速,断点调试等功能 fiddler的工作原理: 正向代理(正向代理服务器,通过浏览器发送请求以前是直接发给服务器,fidder转发(代理服务器), 浏览器请求发给fidder代理服务器,fidder代理服务器转发给服务器, 服务器数据转发给fidder代理服务器,代理服务器发给浏览器 正向代理: 转发浏览器的请求和响应,抓包工具 对客户端透明 反向代理: nginx——负载均衡的——性能 一个服务器 tomcat db(现在用户级别很大,一个tomcat搞不定,需要帮手,三个tomcat分担流量(怎么协调加nginx--负载均衡)) 浏览器发请求过来,不知道请求发给谁,请求量很大,通过nginx把请求分发到各个tomcat里面去,避免的一个tomcat承受不住
14:接口工具对比:(掌握fidder)
fidder 免费的http查看工具,系统代理,工作在应用层 独立运行(是) 支持移动设备(是) 是否收费(否) wireshark 网络抓包,监听网卡,工作在网络接口层 独立运行(是) 支持移动设备(否) 是否收费(否) httpwatch 集成到IE,chrome中的网页数据分析工具 独立运行(否) 支持移动设备(否) 是否收费(基础版/专业版) charles http代理,http监控,http反代理,查看http通讯查看信息工具 独立运行(是) 支持移动设备(是) 是否收费(是) ByrpSuite http代理,用于工具web应用程序的集成平台, 独立运行(是) 支持移动设备(是) 是否收费(是) 包含了很多工具,抓包,漏扫,爆破,黑客必备工具之 wireshark--底层,网络层--用这个
15:websocket: (和http一样是传输协议)
websocket传输协议实时性强 使用场景: 聊天系统 股权交易 直播--部分业务
16:cookie详解
服务器发给客户端:请求的响应数据 响应头:Set-cookies 本地存放cookies攻击 cookie缓存身份的概念:a请求发给服务器,a第一个请求没有带cookie,比如登录操作一开始请求不带cookie的,服务器响应把cookie放到响应头:set-cookie 浏览器拿到set-cookie会自己进行处理,然后第二个请求发出去,就会带上cookie进行校验 浏览器访问里面自己传递,但是接口请求是不会自己带cookie的,需要提取cookie a响应头里面把cookie拿出来,放到一个变量,下一个b请求把cookie放到请求头 不同用户的cookie不一样的,不然会冲突的 cookie里面包含很多内容:但是最常见的是sessionid(会话id) 简单项目里面有cookie就差不多了,但是有的项目里面cookie里面带token-复杂点 cookie是分站点的,站点和站点之间的cookie是相互独立的 浏览器的cookie是保存在浏览器的某个位置 服务器端可以通过:响应头中的set-cookie参数,对客户端的cookie进行管理 浏览器的每次请求,都会把该站点的cookie发送给服务器进行匹配校验 实现登录:cookie+session配合使用 cookie不是只有登录,发送请求访问首页都有cookie。 cookie放在浏览器本地的(缓存里面),sessionid放在服务器的上 sessionid必须寄生在cookie里面,搭配cookie一起使用(sessionid值一般在cookie里面传过去的)
17:sessionid:翻译为会话id
sessionid就是会话id 身份验证-存放到 服务器 session是一个对象,是服务器产生的,保存在服务器中, session有自己的管理机制,包括session产生,销毁,超时等 session id是session对象的一个属性,是全局唯一的,永远不会重复
18:cookie和sessionid合作流程(常见的方式)
一:快速理解 用户登录成功服务器创建session,返回给客户端,客户端浏览器把session保存到它的cookie里 二:过程描述 登录成功服务器立马创建session,并通过(响应头)中的set-cookie属性把session返回给客户端 浏览器把响应头中的set-cookie内容保存起来,存在浏览器自己的cookie中 以后浏览器每次发送请求时,都会把该站点的全部cookie封装到请求头中,传递给服务器
19:tooken:令牌
token: 令牌(令牌代表身份信息,身份标识----身份校验(数据库db校验,每发个请求就需要校验很麻烦,避免频繁访问数据库,token就表示身份)) cookie和token(cookie里面最关键的就是session id值) cookie里面有时候有sessionid和token值 一般为了减少对数据库的访问,校验,数据库的账号密码, 做个令牌:token需要身份校验,账号密码校验,获取token值(返回token字符串)) token也是由服务器参数的,存在服务器的内存或者硬盘中 有一套产生规则,会涉及到加密算法 用token来实现登录 开发提供一个获取token接口,根据用户名+密码,获取一个token值--返回一个token(字符串) token值服务器通过什么发给客户端 通过响应头传给客户端 次要 通过响应消息体传给客户端 主要 通过cookie传递给客户端 很少 token使用场景: 服务器访问的同时,vip学员访问服务器,怎么保证vip学员的权限,普通用户也能访问,vip学员的访问的时候加一个验证,vip访问的同时加个验证, 访问网站同时校验身份,必须去vip官网去认证,通过vip账号密码拿到token值,去访问服务器时候时候token带上。 做二次校验,身份的校验,不是每个人都能访问这个网站,只有vip学员才可以, 访问之前vip学员拿vip账号去网站认证一下,获取到token值然后每次访问都带上这个token就可以了, 这个token可以在cookie里面,token放头headers里面和cookie里面都可以,这时候token值,cookie里面自行加token值,自行组装 额外增加某些校验参数,cookie里面可以加一些值,如token值,自行封装cookie 认证的时候token身份二次校验,token放cookie里面和头里面都行(校验是不是vip学员)
19:接口测试数据格式
一:接口自动化测试数据源(测试用例来源哪里)测试用例一般存放在哪里 1:excel测试用例 2:yaml格式用例 3:csv 二:自动化脚本中的数据类型: 1:表单格式: [urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式(type类型为表单形式,传数据表单形式) 表单格式是键值对组成的,键和值之间用=,多个值之间用& 如:name=zhengsan&age=16 2:json格式(str字符串:键值对类型的字符串) json有对象,数组两种结构,有字符串,数字,逻辑值,空值四种数据类型 用大括号{}表示对象,对象由属性组成的,属性由键值对组成的,键和值用冒号隔开,属性之间用逗号隔开,键必须用双引号引起来 用中括号[]表示数组,数组由单独的值组成 json灵活,json可以嵌套
20:json格式详解
对象:大括号表示,对象由属性组成,属性由键值对组成,键和值对之间用冒号隔开,属性之间用逗号隔开,另外键必须双引号 {"姓名":"姚明","年龄":38} 数组:用中括号表示 ["小明","小李","小百"] [{"姓名":"姚明","年龄":38}] 嵌套:对象中可以再嵌套对象和数组 {"姓名":"姚明","年龄":38,"家禽":["小明","小李","小百"]}
21:了解教管系统:(在线管理系统)(前后端分离的) 什么框架,什么配置
项目描述: 教师管理系统是一款在线管理学生课程的一款软件 主要功能包括: 课程:包含了所有课程名和课程详情 老师:可以查看老师姓名,授课内容及授课班级 学生:包括班级号,班级包含课程,所属学生和班级学生进度 框架结构: 后端架构:cherrypy与django结合 diango:包含了所有的课程名和课程详情 cherrypy:使用cherrypy作为diango的development server 数据库: sqlite 前端: html,js,css
22:python自动化过程中配置文件格式:
配置文件格式:text(很少用),cnf,ini,yaml,excel(很少用),.py也可以
23:简单的接口测试源代码
config.py #配置文件 #time:2020/10/5 HOST="http://127.0.0.1:80" #等同localhost,但是建议写localhost,写url全称,项目换了环境只要改这个配置url就行 http://127.0.0.1:80/mgr/login/login.html http://127.0.0.1:80/mgr/login/login.html http: // localhost / mgr / login / login.html 账号和密码:auto / sdfsdfsdf login.py # 登录接口 import requests #请求库使用request import json from api接口自动化.teachTest.config import HOST #user_headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"} # 2:url路径--考虑可维护性(各个环境ip不同,不同环境测试,增加配置文件) url =f"{HOST}/api/mgr/loginReq" #3:头部,请求头---头都是字典类型的 header={"Content-Typ":"application/x-www-form-urlencoded"} #type类型 #4--请求体body,最常用都是字典写的(传表单形式可以字典来做) payload={"username":"auto","password":"sdfsdfsdf"} print(type(payload))