测试开发07
web自动化测试
selenium中hidden或者是display=none的元素是否可以定位到
不能,可以写javascript,将标签中的hidden改为0可以定位到
selenium中如何保证操作元素的成功率(一定可以是点击的)
1.添加元素智能等待时间driver.implicitly_wait(30)
2.添加强制等待时间(如sleep)
3.try方式进行id,name,xpath,css…以不同方式进行元素定位,如果一种失败可以尝试另一种
提高selenium脚本的执行速度
代码优化、多任务、分布式部署
用例在运行过程中出现不稳定的情况,这次通过可能下次就通过不了,所以要去提高用例的稳定性
1.time.sleep()
2.driver.implicitly_wait(30)
3.多用try捕获,处理异常
自动化用例的执行策略
自动化测试与软件开发本质上是一样的,利用自动化测试工具,经过测试需求分析,设计出自动化测试用例,从而搭建自动化测试框架,编写自动化测试脚本,验证测试脚本的正确性,最终完成自动化测试脚本并输出测试结果
自动化测试连接数据库做数据校验
我一般都在接口自动化中连,但是UI层面的校验也是需要做的
id/name/class/xpath/css selector
xpath/css几乎都能定位到,但是当页面更改了元素位置后就很容易改变,id或name相比他俩在更改元素位置的情况下要强
定位页面上动态加载的元素
触发动态加载元素的事件,动态元素出现后开始定位
定位属性动态变化的元素
有frame框架的先跳到框架里,然后再跳出
xpath或者css通过同级、父级、子集进行定位
加元素等待时间
page object设计模式
把页面作为对象,在使用中传递页面对象,使用页面对象中相应的成员或者方法,能更好的体现面向对象语言的面向对象和封装特性
在定位元素后高亮元素
用javascript来重置元素属性,给定位的元素加背景及边框
断言
assert
assertion checking
断言是指一个程序必须已经存在的状态的一个逻辑表达式,一组程序在执行期间某个点必须满足的条件
如-断言状态码、断言返回数据,与所期望的是否一致
自动化测试的缺陷
不稳定、不宜维护、成本与收益
webdriver
webdriver适用于webUI自动化测试,接口自动化可用jmeter、python中的requests库等
APP UI自动化测试
Android内存不足时,系统如何结束进程获取内存
系统优先结束被挂起的进程,从而释放出内存
app测试常见的严重问题以及引起的原因
crash、ANR — 无响应卡死
设备问题、网络问题、内存问题、代码问题
介绍一下app自动化测试工具
appnium
airtest
Android与web测试的区别
相同点:
1.设计测试用例以及测试原理相同
2.黑盒测试
3.UI测试
4.性能测试
5.稳定性测试
不同点:
1.手机作为通信工具,一些行为会对app产生影响,中断测试
2.安装卸载测试
3.自动化工具,性能app会偏向于monkey、monkeyrunner
app测试的环境
本地环境、测试环境、正式环境
Android SDK的安装步骤
下载jdk与Android sdk
安装并配置环境变量。。。有详细介绍
移动应用及其服务端的测试点
移动应用的测试点:
app的权限问题
安装运行卸载
UI
功能
性能
中断测试
兼容性测试
安全性测试
回归测试
升级更新
用户体验
服务器:
接口测试
性能测试
安全测试
app的bug是客户端问题还是后台问题
样式、数据等为前端、也有报错或者数据问题也可能是后端问题
根据实际业务来
Android中取出日志信息
Android系统日志信息实时导入到本地:adb logcat -v time > d:\mylog.log
实时获取app的日志信息(cmd):
adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
adb命令
查看当前连接的设备:adb devices
安装软件:adb install ***.apk
卸载软件:adb uninstall 包名
从电脑上发送文件到设备:adb push 本地路径 远程路径
adb push C:\test1.txt/sdcard/
从设备上下载文件到电脑:adb pull 远程路径 本地路径
adb pull /sdcard/test1.txt C:
获取实时日志:adb logcat -v time > D:\mylog.log
登录终端设备shell:adb shell
查找包名/活动名:adb logcat | findstr START
启动 APP 启动:adb shell am start -n packageName/activity
关闭 app语法:adb shell am force-stop 包名
监控 APP 启动时间:adb shell am start -W packageName/activity
Monkey 命令:adb shell monkey -v -p mypackage 50
app测试的主流机型
华为 小米 iphon系列 ----测试兼容性
或者采用云真机
APP崩溃、闪退的原因
缓存垃圾过多
运行的程序过多,导致内存不足
应用版本兼容性问题
网络问题
各类问题
appium的启动方式
客户端启动
命令行启动
Android UI自动化测试工具
appium:是一个移动端的自动化框架,可用于测试原生应用、移动网页应用。混合型应用,并且是跨平台的
robotium:是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。
airtest:----------
Android及ios的区别
两者运行机制不同:ios采用的沙盒运行机制、Android采用的是虚拟机运行机制
两者后台制度不同:ios中任何第三方程序都不能在后台运行,android可在后台运行,直到没有内存才会关闭
ios用于UI指令权限最高,android用于数据处理指令最高
接口自动化测试
什么是接口
程序中在不同模块之间传输或接收数据并做处理的类或者函数
http与https的区别
http是超文本传输协议,信息是明文传输;https是http+ssl构建的加密传输身份认证的网络协议,比http要安全
端口号不一样,http是80,https是443
https一般需要用到CA证书,有些免费有些付费
网络协议-https在哪一层
https在应用层
get和post的区别是什么
向服务器提交数据、从服务器获取数据
get通过地址栏传输,post通过报文传输
get参数有长度限制,post无限制
GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)
get请求参数会被完整保留在浏览记录里,post参数不会被保留
例:|
数据查询时,多用get
数据添加修改删除时,建议用post
常见的post提交数据方式
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
http协议无状态协议
无状态是指协议对事务处理没有记忆能力,服务器不知道客户端是什么状态
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
cookie与session的区别
cookie数据存放在浏览器上,session数据存放在服务器上
cookie不安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
session在一定能时间内保存在服务器上,当访问量增多,会比较占用服务器的性能,若减轻服务器性能应当用cookie
单个cookie保存的数据不应超过4K,很多浏览器都限制一个站点最多保存20个cookie,可以将重要信息保存到session,其他信息保存在cookie
DNS
DNS-域名解析服务,DNS是用来做域名解析的,在输入网址后,它转换为IP,然后去访问服务器。没有DNS,假如要上百度则需记住百度的IP,有了DNS,只需要记住对应网站的域名,即网址
接口测试
1.获取接口规范或接口文档,没有文档fidder抓包
2.设计测试用例-在功能测试的基础上
3.jmeter写脚本,实现逻辑覆盖
4.测试接口
设计接口测试用例
通常,设计接口测试用例需要考虑以下几个方面:
①是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例
②是否携带默认值参数
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例
③业务规则、功能需求
这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例
④参数是否必填
逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例
⑤参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
⑥参数数据类型限制
逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例
⑦参数数据类型自身的数据范围值限制
正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
接口测试的工具
postman jmeter fidder…
没有接口文档做接口测试
抓包
在接口测试中上下游接口有数据依赖
用一个全局变量来处理依赖的数据。如登录后返回的token,其他接口都需要这个token,所以就用全局变量来传token参数
依赖于第三方的接口如何进行测试
mock
搭建mock fidder也可以实现mock
接口测试中,依赖登录状态的接口如何测试
依赖登录状态的接口本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建post请求时添加上必要的session或cookie
弱网测试
fidder
F12
接口测试发现的bug
常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
输入错误的参数、多输入、少输入参数,接口可能出现的错误;
安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
当接口出现异常时是如何分析异常的
抓包-fidder或者fidder
查看后端日志 tail -f
如何分析一个bug是前端还是后端的问题
抓包分析:请求数据有问题就是前端的问题,返回报文数据有文艺就是后端的问题
接口自动化
jmeter
pytest
unittest
Jmeter监听器
查看结果树
聚合报告
图形结果
用表格查看结果
。。。
在python中进行数据驱动的测试
在unittest中,没有自带的数据驱动,需要借助ddt来实现,在python运行环境中安装ddt,然后pip install ddt
在pytest中,自带数据驱动,通过@pytest.mark.parametrize(argnames,argvalues)
接口自动化中的关联如何处理
上一个请求返回的结果传入下一个请求的参数中
设置全局变量或者建立正则表达式和后置处理器
自动化测试之结果校验
1.通过断言进行结果校验,达到预期结果与实际结果的对比
2.数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行对比
使用的自动化测试框架
测试框架:python+unittest+requests+ddt+openpyxl+pymysql+logging
python:语法简洁
unittest:定义一个测试用例类,用具体的方法来维护测试用例的生命周期,测试场景行为,测试用例、前置场景、行为、期望结果、实际结果、断言方法、setup/teardown方法
requests:接口调用,支持http请求的库,API简介,提供不同的http请求方法,支持session,cookies
ddt:数据驱动,ddt类装饰器,data测试方法装饰器,unpack解包可迭代的数据类型,普通用户、数据库、配置文件–(基础数据)
openpyxl:数据管理之excel管理数据,使用openpyxl模块来进行excel数据的读和写(excel/csv/json/yaML/txt都可以管理测试数据)
pymysql:数据库交互、数据校验
eval/json:数据格式的转换,eval将python支持的格式转换为对应的格式
logging:日志处理,统一日志输出格式、渠道、级别、执行结果的记录,便于定位问题
Jenkins:持续集成
框架设计思路:数据驱动+结构分层(可读性、可维护性、可扩展性)
数据驱动:将维护数据与代码分离,接口调用行为一致,针对不同的参数组合驱动不同的测试场景,减少代码冗余
结构分层:数据层+用例层+逻辑层
数据层:测试数据的支撑-data.xls
用例层:用力的执行test_register.py,
逻辑层:公用方法的封装与提取logger.py/…/py等公用的模块
框架设计:
测试数据:excel准备测试用例-数据读取-参数值的替换
发起请求:get/post
拿到请求的返回值:解析返回值code、status、msg等信息
断言
好处:
自动化测试与手工测试的完美结合,可以减少重复性的工作
配置灵活,可以自主切换测试环境,执行测试用例
常用功能进行封装,逻辑清晰,易于维护
统一执行入口,管理测试用例集
run.py模块执行测试用例
持续集成、定时构建、快速反馈
具体在项目中自动化怎么应用到实际
对自动化结果的分析完成所有的自动化测试框架的设计和实现后,进行接口测试,集成到jenkins,配置定时执行,生成html报表,查看测试通过率,查看接口的功能
每次发版前进行回归测试
发版后再执行一遍
https://mp.weixin.qq.com/s/0FUZeZFurRYOwiwcoeLzPg