http是超文本传输协议,端口是80
https是由SSL+http协议构成(https多了个加密协议,比http更安全),端口是443
两者都属于传输层协议
TCP是面向连接的,建立TCP需要三次握手,断开需要四次挥手
UDP是面向非连接的协议,不需要与对方建立连接,而是直接发送数据包给对方,比较适合一次传输少量数据,属于不可靠连接,优点:传输速度快
在浏览器输入网址(www.baidu.com)点击搜索→由本机电脑经过DNS进行域名解析成服务ip→再向目标地址发送请求过去并建立三次握手的连接→再将服务器发送过来的数据呈现在自己的浏览器上
a、抓包,辅助测试,看请求入参和出参,判断前后端bug
b、改数据,断点
c、网络测试,目的:验证网络比较差的情况下能不能运行
判断前后端bug
我们一般是通过抓包工具fiddler来抓取数据包来定位问题到底是前端还是后端的,
如果请求没有发出去或者传入的参数有问题,就是前端的问题;
如果前端传入参数和请求都没问题,后端返回的响应数据有问题,那就是后端的问题;
如果前端传入参数和请求是正确的,后端返回的响应数据也是正确的,那么可能就是前端处理返回数据的问题。
抓包后看响应码,1,2,3开头,请求错误是前端问题,响应错误是后端问题,请求响应正确,可能就是前端显示问题,4开头,前端问题,5开头,服务器,运维错误
a、fiddler设置代理
b、web端、App端连接使用fiddler代理
c、下载安装fiddler证书
a、性能方面:
web页面可能只关注响应时间,而app还需要关心流量、电量、CPU、GPU等
b、兼容性方面:
web是基于浏览器的,而浏览器的兼容一般是选择不同的浏览器内核进行测试(IE、Chrome、火狐);APP测试则必须要依赖手机或者平板,要看分辨率、屏幕尺寸、还要看设备系统(Android、iOS)
c、APP还需要考虑异常情景(中断、来电、短信、关机、重启等)
d、APP测试还要测安装、卸载、更新,web测试就不需要考虑这些
e、APP产品都是触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控等
cookie和session都是用来跟踪浏览器用户身份的会话方式
cookie数据保存在客户端,大小受限制,最大4kb
session数据保存在服务器端,更加安全;session会比较占用服务器性能,当访问增多时应该用cookie
get是用来查询的,get的参数跟在URL后面,get传送的数据量较小,不能大于2kb
post是用来新增的,post的是在请求体里面,比较安全,post传送的数据量较大,一般不受限制
fiddler是个抓包工具,当浏览器访问服务器会形成一个请求,此时,fiddler在浏览器和服务器中间,当浏览器发送请求会先经过fiddler,然后再到服务器,服务器返回数据给浏览器也要经过fiddler,然后才会在浏览器中显示。这样一个过程,fiddler就抓到了请求和响应数据的整个过程。
在开发过程中,前后端完成的进度不一样,后端接口文档写好了,前端还没有写好页面时,我们就可以先做接口测试了。
1、问开发要接口文档
2、分析接口文档,不懂的与开发进行沟通
3、讲自己需要测的接口录入postman中,分模块录入,进行冒烟测试
4、提取公共变量,比如:ip
5、编写用例
6、生产测试脚本,做好上下游关系,做好断言
7、处理好第三方挡板接口
8、运动所有接口,有bug发bug(bug用断言来判断)
9、生成接口测试报告
方便后期管理
接口测试用例的设计,主要从输入和接口出发:
(1)针对输入,可以按照参数类型进行设计
(2)针对接口处理,可以按照逻辑进行用例设计
(3)针对输出,可根据结果进行分析设计
断言响应状态码
断言响应正文:断言响应中是否有指定的字符串
断言响应时间:断言响应结果返回的时间是否在指定范围
我们之前做过关联接口的测试,比如我们的加入购物车需要传入session id,而这个session id值时动态的,是需要登入接口请求成功后,在响应文本中才能获取的,那么我们在jmeter中就需要先运行登录接口请求,然后通过jmeter的后置处理器,比如正则表达式提取器或者JSON提取器来获取 登录接口响应结果中的session id值,将它存入一个变量中传给购物车的接口,这样添加购物车接口就可以请求成功
创建一个测试计划→添加一个线程,并在线程下面,创建一个JDBC Connection,设置相关信息(如数据库地址、驱动程序,数据库用户名和密码)→在线程组下面,再创建一个JDBC Request,我们需要对数据库做插入操作→添加监听器→查看结果树
压力测试:在一定得负载下系统长时间时间运行的稳定性
举例:登录接口,我们先10个用户访问,然后100个用户访问,然后1000个用户访问,关注程序的响应时间,所耗资源或者关键资源消耗
负载测试:对程序不断增加压力,每个增加后,程序的性能情况
举例:运行一天,1个月,一年,关注他们各项指标是否都在正常指标内,是否会内存溢出,是否出现功能性故障等
a、列表[ ]、元组()、字典{ }
b、列表和元组是有序的,字典是无序的
c、字典是键值对的形式,且字典中不要出现两个相同的键
d、元组的值时不能被修改的,相当于不可改变的列表
字符串:%s
整型:%d
浮点型:%f (%.2f表示两位小数)
所有类型:%r
for循环适合用在已知循环次数的循环,while适合用在未知循环次数的循环
for循环知道循环次数,先判断后执行;while不知道循环次数,先判断后循环
break用于终止整个循环,不再执行下面的循环语句,
continue用于终止本次条件的循环,回到下一个条件继续执行,只会跳过本次循环
a=[1,2,3,4,5,6,7,8,9]
a[2:8:2]
结果是3,5,7
第一个2是指从下标为2的开始取,8是指在前八个里取要的值,第二个2是指每个两个取一次(包括上一个取的值)
a[开始:结束:间隔]
添加:append()
删除:del,pop
获取长度:len()
去重:set()
合并两个列表(最简单的是直接用+):extend()
问题一:有哪些元素定位方式?(8种)
id、class_name、name、xpath、tag_name等
问题二:你觉得什么样的项目适合做自动化测试?
1、项目周期长且相对稳定
2、需要经常做回归测试和冒烟测试
3、需要在多平台上重复运行相同测试的场景
问题三:你们公司怎么做自动化测试?
我们的自动化测试主要是web UI的测试,主要用于冒烟测试和主要功能的回归测试,或者主流浏览器的兼容性测试
1、编写自动化测试用例,我们根据功能测试用例编写自动化测试用例(主要是加入元素的定位说明),然后依据自动化测试用例,使用Python语言转化成自动化测试脚本,驱动谷歌浏览器,用selenium提供的API进行页面元素的定位,并对元素进行操作(比如点击、输入内容、下拉框选择等)
2、搭建框架,使用Python+selenium+unittest来搭建自动化测试框架,unittest主要是方便管理并执行多个测试用例,获取最终的测试结果报告
3、自动化脚本用来做冒烟和回归测试,脚本编写完之后,我们在每次开发提交测试版本后,用这个脚本来进行冒烟测试,也会用它来做主要功能的回归测试
4、维护测试脚本
问题四:自动化测试用在什么时候
每次版本提交后,用自动化脚本跑一下主要功能,看是否跑得通
问题五:元素定位不到要哪些原因?
1、frame下拉框的原因定位不到元素,要先跳转到frame下,才能定位到元素
2、如果元素是动态的就定位不到
3、页面还没完全加载出来,就对页面上的元素进行操作
4、有些元素需要二次定位(如弹出框登录)
5、元素不可见
输入:.send_keys()
点击:.click()
清空:.clear()
尺寸大小:size
后退:back
前进:forward
刷新:refrensh
关闭当前主窗口:close
关闭全部页面:quit
获取当前页面的地址:current_url
获取当前页面的标题:browser_title
右击:context_click()
双击:double_click()
拖动:drag_and_drop()
鼠标悬停:move_to_element()
一直按着一个元素:click_and_hold()
删除键:(Keys.BACK_SPACE)
空格键:(Keys.SPACE)
回退键:(Keys.ESAPE)
回车键:(Keys.ENTER)
全选:(Keys.CONTROL,“a”)
复制:(Keys.CONTROL,“c”)
粘贴:(Keys.CONTROL,“v”)
保存:(Keys.CONTROL,“s”)
剪切:(Keys.CONTROL,“x”)
撤回:(Keys.CONTROL,“z”)
切到frame下:switch_to.frame(frame的标记)
返回原有的页面:switch_to.default——content()
强制等待:sleep()
隐式等待:implicitly_wait() 一般一个页面用一次就好,如果找不到元素会报错
显示等待:WebDriverWait(实例,等待时长,每隔几秒扫描一次).until(lambda x:x.元素定位)
获取当前页面的窗口句柄:current_window_handle
获取所有窗口句柄,返回的是一个数组:window_handles
窗口编号:switch_to.window
网络测试
安装卸载:adb install 本地安装包/adb uninstall 包名
中断
横竖屏
adb连接不上设备,要么是adb连接出了问题,要么是设备出了问题,如果是adb出了问题,可以试着重启下adb服务,adb kill -server 然后adb start -server,也有可能是adb连接有问题,试着重连下设备adb connect ip:端口。如果是设备出了问题,看下设备设置里的开发者选项跟usb调试选项有没有打开,没有的话就打开下,也有可能是设备宕机卡死了,试着重启下设备再进行连接
1、功能测试
(1)业务测试
a、单功能测试;b、功能交互测试;c、用户场景测试
(2)特殊点测试
a、横竖屏测试;b、长按、滑动、手势;c、多卡待机
(3)使用fiddler工具辅助测试
a、autoresponder模块,模拟数据返回
b、inspectors模块,模拟请求
c、抓包看数据请求和响应
2、性能测试
(1)启动时间(热启动、冷启动)
(2)CPU占用
(3)内存占用
(4)GPU占用
(5)流量占用
(6)电量耗用
3、其他类测试
(1)兼容性测试
(2)网络测试
(3)安装、卸载、易用性测试
一般我们在完成功能测试的时候会进行专项测试,比如网络切换测试,安装卸载测试,横竖屏测试,冲突测试等;比如说网络切换测试,我们通常会在断网-2G-3G-4G-WIFI之间进行切换,来检查我们的APP程序在不同的网络环境下的表现
a、网络问题:网络切换;网络中断;
b、内存问题:内存不够;或者缓存的垃圾过多;内存泄漏;内存溢出
c、资源未加载完:,此时打开APP时会出现闪现
d、权限问题:系统权限被拒绝使用相关权限时会出现闪退;一般是AndroidManifest文件中忘记配置相关权限
app闪退一般是app的缓存垃圾过多,长时间不清理垃圾文件会导致系统越来越卡,出现app闪退的情况,这种就要清理下缓存垃圾就行;还有就是后台运行的程序过多,导致内存不足,也会出现闪退的情况,很多人都有这样情况,打开了一个程序,不用了也不会去关掉,一直放在后台,出现这种情况清理下不用的后台程序就行;还有就是应用的版本兼容问题,如果应用的版本过低,会导致跟设备当前系统不兼容,造成闪退,这样情况更新下应用版本就行,另外就是有些新版本在调试中,也会造成闪退,这种情况卸载安装比较稳定的旧版本就行
monkey的作用是通过一系列的随机操作,来测试手机上的应用的稳定性,其实就是看在高频率的大量操作下,应用会不会出现问题