一:jmeter: 纯java编写负载功能测试和性能测试开源工具, 支持接口自动化测试,录制、抓包、可进行压力测试(增加线程,考验服务器最大支持访问数)、弱网测试、添加请求、添加断言,查看断言、结果树,聚合报告,分析测试报告等
聚合报告参数详解:
1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
2. Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间
4. Median:中位数,也就是 50% 用户的响应时间
5. 90% Line:90% 用户的响应时间
6. Min:最小响应时间
7. Max:最大响应时间
8. Error%:错误率——错误请求数/请求总数
9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
二:ant: 将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,并生成测试报告并发送
三:jenkins: Jenkins是一个开源CI服务器,基于Web访问,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,拥有大量的插件:这些插件极大的扩展了Jenkins的功能,持续集成工具,所有工作都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间和工作量;
四:monkey:它是Android SDK系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行。向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行稳定性测试。
五:charles: 1.抓包(http、https):设置手机HTTP代理、https charles也需要证书
2.弱网测试:通过Throttle Settings(网络控制)、Enable Throttling(启用设置)、Throttle preset(通过预设网络值来拟定网络)、设置网络带宽值等
3.网络请求的截取并动态修改:
4.压力测试:通过右键点击链接,Repeat Advanced(重复),选择Iterations(重复次数)Concurrency(并发数)
5.数据替换:通过链接右键点击Map Local(本地位置)进入设置,选择替换数据文件,替换即可
六:selenium :web自动化测试框架(测试浏览器兼容性的自动化)selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件unittest优点:兼容更多的平台( Windows、Linux 、 Macintosh等)以及浏览器(火狐,IE,谷歌等)
定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector
强制等待:sleep()强制等待,不管你浏览器是否加载完,程序都得等待
显示等待:WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了.它主要的意思就是:程序每隔多久查看一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
隐式等待:implicitly_wait(),整个driver周期有效,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止
七:appium:开源测试自动化框架,可用于原生,混合和移动Web应用程序测试
两大组件:
一:Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。
二:Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,提供Appium自动化服务器的强大功能。
Appium GUI是Appium desktop的前身。 也就是把Appium server封装成了一个图形界面,降低了使用门槛。
因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。
Appium-desktop主界面包含三个菜单:
start server:启动 Appium server
八:pytest:pytest是一个全功能的Python测试框架,
# -*- coding:utf-8 -*-
import pytest
@pytest.fixture(scope='function')
def setup_function(request):
def teardown_function():
print("teardown_function called.")
request.addfinalizer(teardown_function) # 此内嵌函数做teardown工作
print('setup_function called.')
@pytest.fixture(scope='module')
def setup_module(request):
def teardown_module():
print("teardown_module called.")
request.addfinalizer(teardown_module)
print('setup_module called.')
@pytest.mark.website
def test_1(setup_function):
print('Test_1 called.')
def test_2(setup_module):
print('Test_2 called.')
def test_3(setup_module):
print('Test_3 called.')
assert 2==1+1 # 通过assert断言确认测试结果是否符合预期
scope参数有四种,分别是'function','module','class','session',默认为function。
九:unitest: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果
unittest.TestCase:TestCase类,所有测试用例类继承的基本类: class BaiduTest(unittest.TestCase)
unittest.main():将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法并自动执行他们。
unittest.TestSuite():unittest框架的TestSuite()类是用来创建测试套件的。
unittest.TextTextRunner():unittest框架的TextTextRunner()类,通过该类下面的run()方法来运行suite所组装的测试用例。
unittest.defaultTestLoader(): defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。
TestCase类的属性:
setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。
tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。
TestSuite类的属性:
addTest(): addTest()方法是将测试用例添加到测试套件中,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。 suite = unittest.TestSuite() suite.addTest(test_baidu.BaiduTest('test_baidu'))
TextTextRunner的属性:
run(): run()方法是运行测试套件的测试用例,入参为suite测试套件: runner = unittest.TextTestRunner() runner.run(suite)
微信朋友圈测试用例:
关系型数据库:
但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)
非关系型数据库:
非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)
列模型:存储的数据是一列列的。关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录。(这种模型,数据即索引,IO很快,主要是一些分布式数据库)
键值对模型:存储的数据是一个个“键值对”,比如name:liming,那么name这个键里面存的值就是liming
常见非关系模型数据库:列模型:Hbase、键值对模型:redis,MemcacheDB、文档类模型:mongoDB
非关系型数据库的特点:效率高(因为存储在内存中)、但不安全(断电丢失数据,但其中redis可以同步数据到磁盘中),现在很多非关系型数据库都开始支持转存到磁盘中。
MySQL外连接、内连接的区别?
left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。内连接是交集
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。外连接是并集(union)
多表联查-- 2.查询科目为java的最高成绩的学生名字和编号
SELECT stu1.sname,stu1.sid,i.subname,MAX(i.cj) FROM (SELECT stu3.subname,stu2.sid,stu2.cj FROM stu3 INNER JOIN stu2 ON stu3.subid = stu2.subid WHERE subname LIKE "java") i INNER JOIN stu1 ON i.sid = stu1.sid
+-----+------+------+-------+------------+--------------+--------+-------+
多表联查-- 3.查询名字为李四的所有科目总成绩
SELECT stu1.sname,SUM(stu2.cj) FROM stu1 INNER JOIN stu2 ON stu1.sid = stu2.sid where sname LIKE "李四"
数据库常用方法:
增:Insert into 表名 value 值
删:Delect from 表名 where 值
改:Update 表名 set 字段=字段 where 字段;
查:Select * from 表名
自增 auto_increment
主键 primary key
非空 not null
唯一 unique
默认值 default
外键 foreign key
查看所有的表 SHOW TABLES ;
创建一个表 CREATE TABLE n(id INT, name VARCHAR(10));
# 添加字段: Alter table 表名 add 字段名 数据类型Alter table n ADD age VARCHAR(2) ;
# 删除字段: Alter table 表名 drop 字段名
# 更改字段属性和属性:Alter table n CHANGE age a INT;
# 只更改字段属性:Alter table n MODIFY age VARCHAR(7) ;
增加数据 INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');
删除数据:DELETE FROM n WHERE id = 2;
更改数据:UPDATE n SET name = 'tom' WHERE id = 2;
数据查找 : SELECT * FROM n WHERE name LIKE '%h%';
数据排序(
order by)(反序) :
Select * from 表名 order by stu_age asc/desc
分组查询(group by):Select * from 表名 group by sex =‘男’
总 数(count) SELECT count(id) AS total FROM n;
总 和(sum) SELECT sum(age) AS all_age FROM n;
平均值(avg) SELECT avg(age) AS all_age FROM n;
最大值(max) SELECT max(age) AS all_age FROM n;
最小值(min) SELECT min(age) AS all_age FROM n;
Linux:
如何杀死一个进程:1.先查找进程号:ps -ef | grep 进程(例如:tomcat) 2.杀死进程:kill -9 进程号
查看进程和端口号的使用情况:netstat -tunlp|grep
查看端口号被占用:netstat -anp | grep 端口号 查看是start状态还是stop状态
查看内存:cat /proc/meminfo
查看cpu:cat /proc/cpuinfo
进入根目录:cd/
返回上层:cd..
更新:source
显示工作路径:pwd
查看目录中的文件 :ls
编辑:vi
编辑保存:wq
删除目录:rmdir
创建目录:mkdir
查找文件:find
解压:tar -vxzf
显示当前进程:ps
如何通过子元素定位父元素:1.可以使用..代表的是父节点 2.可以使用parent来定位父类元素
Android手机和IOS手机,系统有什么区别?
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
Android:一:兼容性测试,Android 从4.0版本的手机测试到9.0版本手机。二:各大品牌的手机都的进行测试,比如:小米小米9 小米8 小米7 小米6 note 红米系列 7红米5,华为: 华为mate20 华为mate10,华为荣耀: 荣耀10,9,8 ,vivo: x21,27,23,oppo: R7,R9,R11,三星手机: note9, 8,7 S9,8。三:稳定性测试: 使用monkey命令进行稳定性测试
ios:兼容性测试:ios版本测试从9-12,手机型号从4S测试到xmax
web端测试:兼容性测试:IE浏览器7-12,火狐浏览器 35-最新的,谷歌浏览器,(http、https)
不可逆操作如何处理:如删除订单:
1.假删除(修改删除标识即可)
2.真删除就真的删除了,为不可恢复状态,除非再新建订单重新执行流程
在测试中,上下游接口有数据依赖如何处理(下个接口用到上个接口的数据):
1.使用静态值,给定一个符合条件的死数据
2.或者从数据库中直接获取数据
软件的生命周期:1.产品收集市场需求,2.需求分析,3.产品设计需求,4.UI界面设计,5.前后台开发,设计数据库表、框架,编码,6.版本测试,7.产品上线,8.产品运营