1.计算机历史:四个阶段
2. 操作系统:
1.移动端系统:android和ios
2.pc端:Windows linux,macOS,Unix3 Linux
1.Linux分类:Ubuntu ,centos,redhat
2 .虚拟机安装
3. 虚拟机的创建
4.Linux命令
1.目录切换
切换到根目录 cd /
切换到上一级目录 cd../
切换到用户主目录 cd ~
切换到指定目录 cd/usr
切换为超级用户 su root
2.目录
创建目录:mkdir 目录名称
删除目录 rm -rf 目录名称
移动目录 mv -r 被移动的目录 目标位置(想要移动到哪里)
复制目录 cp -r被复制目录 目标位置目录
查看目录 ls ,ls -a,ls-l,(ll)
修改目录名称 mv 旧名字 新名字
查找目录 find 目录,find /-name 目录
1 ssh安装
2 jdk
3 Mysql
4 tomcat安装,解压 开放端口
5 jenkins 持续化继承工具
shell脚本
1.变量
定义变量:变量名=值
输出:echo
双引号:遇到$输出变量值,但是被\处理为字符串
单引号:遇到$默认字符串
linux用反单引号`包裹
2.脚本输出当前目录
#!/bin/bash
dir=`pwd`
echo $dir
3 输入,输出,调用
echo
read
./sh
4 参数的传递格式:sh a.sh 参数列表
$1:接收第一个参数~~$n
$n: 文件名称
$@: 所有参数 s
$#: 参数个数 $0
5 运算符
1逻辑
-a
-o
!
2 比较
1.数字
-eq
-ne
-gt
-lt
-le
2 字符串
==
!=
6.if
1.单条件语句
if [条件]
then
操作
else
操作语句
fi
2.多条件语句
if[条件]
then
语句
.
.
.
elif[ 条件 ]
then
语句
.
.
.
else
语句
fi
7.case
case "$变量名"in
"")
语句;;
esac
8 for
for i in 1 2 4
for i in `seq 开始值 间隔 结束值`
9 while
while [ 条件 ]
do
语句
done
函数 :先定义,在调用
参数 :返回值 0没问题 1有问题
jmeter
一.下载,配置,安装
二.线程组
1.进程 ,线程,线程组
1.创建 :测试计划-》添加-》线程-》线程组
2.3个参数 线程数,准备时长,循环次数
三.http请求
指定域名,路径
四 .查看结果(监听器)
1.察看结果树
2.汇合报告
3.聚合报告
4.后端监听器
5.汇总图
6.断言结果
7.比较断言可视化器
8.生成概要结果
9.图形结果
五.事务控制器
事务控制器会生产一个额外的采样器,用来统计该控制器子结点的所有时间。
在线程组下创建事务控制器
六. 逻辑控制器
七.循环控制器
八.断言-检查点
预先判断可能会出现的字符串,如果匹配成功断言成功,否则断言失败
1.响应断言
2.json断言
九.前置处理器和后置处理器
主要是生成请求之前和之后完成工作。
十.定时器
数组之间的间隔
Jmeter组件参数化
1.添加——>配置原件——>用户定义变量
2.定义一个变量并赋值
3.在http请求中调用变量
4 在http请求电泳第二步中定义变量
5 数据库导出TXT文件
函数助手
文件中不要出现中文
工具——>函数助手对话框
Jmeter正则表达式
线程组——>添加——>后置处理器——>正则表达式提取器
七单元——Jmeter脚本录制
第一行要写 #!/bin/bash
vim 编辑
执行: ./文件名 sh 文件名
chmod 777 文件名 修改文件权限
定义变量规则:
变量名=值
shell定义变量的规则:
1: 等号两边不能有空格
2:定义特殊的变量需要用单引号或者双引号结合
3:定义linux命令需要用反单引号
区分:
双引号中有$变量名,输出的是变量名对应的变量值
单引号中有$变量名,输出的是$变量名
命名格式:脚本名称用 . sh
脚本输入输出格式:
输入语句用:read-p"描述"
Shell输出值:echo$变量名
参数传递:
$1:接收第一个参数~~$n
$n: 文件名称
$@: 所有参数 s
$#: 参数个数 $0
比较运算符
1比较运算符(数字)
-eq 比较是否相等equal
-ne 比较不相等 notequal
-gt 比较大于 greater than
-ge 比较大于等于 greaterequal
-lt 比较小于 less than
-le 比较小于等于 lessequal
2计较运算符(字符串)
== 比较是否相等
!= 比较不相等
加一操作 : ((i++))((i+=1))
加n操作 : s=$(($s+$i))s=$[$s+$i]((s=$s+$i))
3逻辑运算符
-a 逻辑与 -o逻辑或 !逻辑非
if语句
格式: if [ 条件 ]
then
语句
else
语句
fi
多条件:if [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
......
else
语句
fi
case规则:
格式:case $变量名 in
"值")
语句;;
"值")
语句;;
.....
esac
注意:1、case这第一行以in结尾
2、值可以是字符串也可以是数字, 如果数字范围[0-9]
3、结束语句;;
4、esac结束标志
for循环
格式:for 变量 in 列表
do
语句
done
数量过多时不能全列出来时:
for i in `seq 1 2 100`
do
echo $i
done
注意:in之后的 ` 内 seq mix step max
mix 开始数据 step:间隔 max 结束数据,如果step为1,可以省略,需要用反单引号,seq语句标志
While循环
格式:while [条 件 ]
do
语句
done
注意:1、 while后面有空格
2、条件两边有空格
3、while条件里面存在变量,需要$,而且变量两边需要双引号
4、done是结束标识
Shell脚本的函数
格式:函数名(){代码 }
调用格式
函数名
函数中的参数使用$n来接收数据
函数中的返回值:Shell中函数默认存在返回值查看返回值是$?
如果没有代码错误默认返回值为0 有代码错误返回1
八单元——Jmeter
1、下载、配置、安装
2、线程组
1、进程、线程、线程组
2、创建:测试计划→添加→线程→线程组
3、三个参数
3、Http请求:
指定域名、路径、端口、方法、指定参数、协议
4、查看结果 \ 监听器:
1、查看结果树 **
2、图形 结果 **
3、聚合报告
4、用图表看结果 **
5、逻辑控制器
1、循环控制器
2、事务控制器(有开始、有结束)
6、断言
预先判断可能会出现的字符串。如果匹配成功,断言成功。否则断言失败
7、处理器
前置处理器:前置处理器常常用来修改请求前的设置
后置处理器:后置处理器则常常用来处理响应后的数据
8、定时器
控制两个请求之间的间隔
9、参数化
1、自定义变量
1、添加→配置元件→用户定义变量
2、定义一个变量并赋值
3、在http请求中调用变量$(变量名)
2、引用文件中的变量
1、添加→配置元件→CSV DAta Set Config
2、设置线程组的线程数
3、文件路径、编码、变量、用到文件结束符(true、false)
4、在http请求中调用第二步中定义变量
5、数据库导出TXT文件
10、Jmeter 函数助手
1、工具——》函数助手—>选择CSVRead——> 文件路径(必须放在bin里面)列名(0,1,2)——>生成
2、把生成的码复制到HTTP请求界面参数值
11、脚本录制
1、移动端录制
1、保证同一网络
2、jmeter——>测试计划——>添加非测试元件——>Http服务代理——>
2、PC录制:badboy
九单元——Python的基础语句和语法
一、下载、安装、第一个程序
二、变量
1、数据类型
Numbers(数字型):int(整型)、long(长整型)、float(浮点型)、complex(复数型)
bool(布尔型):true、false
String(字符串)
List(列表型)
Tuple(元祖型)
Dictionary(字典)
2、标识符组成、命名规则
1、什么是标识符?
开发人员在程序中自定义的一些符号和名称
标识符是自己定义的,如变量名 、函数名等
2、标识符命名规则
1)只能由字母、下划线、数字组成
2)不能以数字开头
3)不能使用关键字
4)严格区分大小写
3、注释
分为单行注释和多行注释
单行注释:光标移动至注释行Ctrl+/
多行注释:选中需要注释内容输入‘’‘
4、关键字
三、输入和输出
输入语句:input()用来获取控制台的输入
输出内容:print(内容)用于打印输出,最常见的一个函数
objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
sep -- 用来间隔多个对象,默认值是一个空格。
end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
file -- 要写入的文件对象。
四、运算符
1、赋值运算符:
简单的赋值运算符:=
加法赋值运算符:+=
减法赋值运算符:- =
乘法赋值运算符:*=
除法赋值运算符:/=
取模赋值运算符:%=
幂赋值运算符:**=
取整赋值运算符://=
海象运算符::=在示例中,赋值表达式可以避免调用len()两次
2、比较运算符
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
3、逻辑运算符
逻辑与:and
逻辑或:or
逻辑非:not
4、算数运算符
加:+
减:-
乘:*
除:/
取模:%
幂/次方:**
取整://
五、判断语句
1、if
if 要判断的条件:
条件成立时,要做的事情
2、if else
if 要判断的条件:
条件成立时,要做的事情
else:
条件不成立时,要做的事情
3、if elif else
if 要判断的条件:
条件成立时,要做的事情
elif 要判断的条件:
条件成立时,要做的事情
else:
条件不成立时,要做的事情
六、循环
1、while
while 条件:
条件成立时,要做的事情
条件成立时,要做的事情
.....
2、for
for 临时变量 in 列表或者字符串等可迭代对象:
循环满足条件时执行的代码
十单元——Python的列表
一、格式
变量=[,,,]
二、列表的新增
append, extend, insert
append:直接在列表后方进行拼接添加的是一个元素(列表会占用一个索引位)
extend:直接在后方拼接追加的多个元素(列表会占用多个索引位)
insert:对指定索引位进行新增数据(如果新增的索引不存在,则会默认添加到最后索引位)
三、列表的修改
1、通过索引来修改
列表名 [要修改的索引位]="要修改的内容"
!!!索引不存在的时候,会报错
四、列表的删除
1、del 删除指定索引位的内容
del 列表名 [需要删除的索引]
2、pop 默认删除最后一个元素
3、remove 根据元素的值来进行删除
五、列表的查询
index, count
1、ndex 查询列表中的元素,如果存在就返回给元素的索引,不存在就报错
格式: 列表名称 . index ( 查询的内容 )
2、count 查询列表中的元素的个数
格式; 列表名 . count ( 所要查询个数的元素 )
六、列表的排序
1、sort 方法是将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
2、reverse 方法是将 list 反转
七、列表的循环取值
方法一:for 循环
方法二:while 循环
八、列表嵌套
变量=[,,,]
二、列表的新增
append, extend, insert
append:直接在列表后方进行拼接添加的是一个元素(列表会占用一个索引位)
extend:直接在后方拼接追加的多个元素(列表会占用多个索引位)
insert:对指定索引位进行新增数据(如果新增的索引不存在,则会默认添加到最后索引位)
三、列表的修改
1、通过索引来修改
列表名 [要修改的索引位]="要修改的内容"
!!!索引不存在的时候,会报错
四、列表的删除
1、del 删除指定索引位的内容
del 列表名 [需要删除的索引]
2、pop 默认删除最后一个元素
3、remove 根据元素的值来进行删除
五、列表的查询
index, count
1、ndex 查询列表中的元素,如果存在就返回给元素的索引,不存在就报错
格式: 列表名称 . index ( 查询的内容 )
2、count 查询列表中的元素的个数
格式; 列表名 . count ( 所要查询个数的元素 )
六、列表的排序
1、sort 方法是将list按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
2、reverse 方法是将 list 反转
七、列表的循环取值
方法一:for 循环
方法二:while 循环
八、列表嵌套
格式:变量名 = [ , [ , ] ]
十一单元——元组和字典
一、元组
1、元组的格式
变量名=( , , , , )
2、访问元组
通过索引来取数据:
索引存在时会输出相对应索引的元素
索引不存在时会报错
3、查询个数
count查询元素存在的个数
4、查询索引
index查询元素的索引,有对应元素返回索引,如果无则报错
5、修改数据
元组不能修改数据(需与列表相互转换之后才可改变元素)
6、类型转换
元组转列表:list(元组名)
列表转元组:tuple(列表名)
7、元组循环取值
方法一:for循环取值
for i in 元组名 :
print( i )
方法二:while 循环取值
先定义变量 i = 0
while i < len(元组名):
print( 元组名 [ i ] )
i + = 1
二、字典
1、字典格式
变量名={ key1 : value , key2 : value ,,,}
字典的每个元素由2部分组成,键(key):值(value)
2、根据键访问值
有对应Key时,会输出相应的Value值
info={"name":"anfly","age":18,"sex":"男"}
print ( info [ " name " ] )
# anfl
若无对应的Key时,则会报错
如果不确定字典中是否存在某个键而又想获取其值时,如何操作?
列表名 . get ( 不确定的key值 )
列表名 . get ( 不确定的key值 , 不存在时提示内容)
3、修改元素
字典里每个元素都是可修改的,只要通过Key找到Value,即可修改,否则是新增
有对应的key则是修改数据,没有对应的key是新增数据
4、添加元素
格式:字典名 [ 新增Key值 ] = 新增 Value值
5、删除元素
1)del
del 字典名会删除整个字典
del 字典名 [ key值 ]会删除指定元素
2)clear 清空
字典名 . clear ( ) 可以清除字典全部元素
6、查询长度
len ( 字典名 ) : 查询键值对的个数
7、字典中循环
方法一:for i 字典名 . keys() :
print ( i , 字典名 [ i ] )
方法二:for k , v 字典名 . items():
print ( k , v )
方法三:for i in 可迭代 :
print ( i )
for i , ch in enumerate( Key值 ):
print ( i , ch )
十二单元——集合和函数
一.集合
定义特征:集合是无序的,集合中元素是唯一的,集合一般是用于元组或者列表中元素去重
格式:变量名=set()
变量名.add(元素) #不能初始化
添加元素:add update
删除元素:remove pop discard
二.集合的交集和并集
交集:使用&连接多个集合,得到相同的元素
并集:使用|连接对个集合,得到全部集合中全部的元素
三.公共方法
运算符:* (复制) +(合并) in(元素是否存在) not in(元素是否不存在)
python中的内置函数:
长度:len()
最大值:max()
删除:del()
四.函数
定义:在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数
格式:def 函数名():
执行语句
函数名()
位置参数格式 def函数名(参数1,参数2):
代码块
函数名(值1,值2)
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”
关键字参数格式:def函数名(参数1,参数2):
代码块
函数名(参数1=值1,参数2=值2)
缺省参数定义:在形参中默认有值的参数,称之为缺省参数
不定长参数:有时可能需要一个函数处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会命名
参数位置顺序:deffun(位置参数,*args,缺省参数,**kwargs):
代码块
fun(参数值)
函数类型:
1. 无参数,无返回值:此类函数,不能接收参数,也没有返回值,一般情况下,打印提示灯类似的功能,使用这类的函数
2. 无参数,有返回值:此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类函数
3. 有参数,无返回值:此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
4. 有参数,有返回值:此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数
函数的嵌套:一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用
五.变量
定义:
局部变量,就是在函数内部定义的变量
全局变量,在函数外边定义的变量叫做全局变量
十三单元——python的文件操作异常处理
一.文件的介绍
1.文件
2.文件的作业
二.文件的打开和关闭
1.打开文件
打开一个已经存在的文件,或者新建一个文件
2.写数据 write
3.读数据 read readline readlines
4.可写 a
5.读数据 rd
6.写数据 wb
7.关闭文件 close()
三.文件和文件夹的操作
1.文件重命名
os模块中的rename()可以完成对文件的重命名操作
2.删除文件
os模块中remove()可以完成对文件的重命名操作
3.创建文件夹
os模块中的mkdir()可以完成对文件的重命名操作
4.获取当前目录
os模块中的getcwd()可以获取当前目录
四.异常
1.定义:异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
2.作用
捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
3.语法
4.使用except而不带任何异常类型
5.使用except而带多种类型
6.try-finally语句
7.异常传递
8.触发异常
9.用户自定义异常
五.模块
1.定义:Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句
2.引入:import
3.from...import语句
4.from...import*语句
六.python中的包
定义:包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在init.py 文件, 该文件的内容可以为空。init.py 用于标识当前文件夹是一个包。
第十五单元 Python单元测试之unittest
一、单元测试、集成测试、功能测试
单元测试:颗粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”;是指对软件中的最小可测试单元进行检查和验证
集成测试:介于单元测试和系统测试之间,一般由开发小组采用白盒加黑盒的方法测试,即验证设计又验证需求。主要用来测试模板与模板之间的接口,同时还要测试一些主要的业务功能。
功能测试:颗粒度最大,一般由独立的测试小组采用黑盒的方式来测试,主要测试系统是否符合需求规格说明书。
一、UnitTest组成
(1)setUp():准备环境,执行每个测试用例的前置条件;
(2)tearDown():环境还原,执行每个测试用例的后置条件;
(3)setUpClass():必须使用@classmethod装饰器,所有case执行的前置条件,只运行一次;
(4)tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次;
1、testFixture
作用:用于一个测试环境的准备和销毁还原
2、testCase
定义:就是一个测试用例
3、testSuite
测试套件,可以将多个测试用例集合在一起,能一起执行选中的测试用例
4、testRunner
执行测试用例
二、断言
(1)assertEqual(a,b):断言a和b是否相等,相等则测试用例通过。(最常用的)
(2)assertNotEqual(a,b):断言a和b是否相等,不相等则测试用例通过。
(3)assertTrue(x):断言x是否True,是True则测试用例通过。
(4)assertFalse(x):断言x是否False,是False则测试用例通过。
(5) assertIs(a,b):断言a是 否是b,是则测试用例通过。
(6)assertNotIs(a,b):断言a是否是b,不是则测试用例通过。
(7)assertIsNone(x):断言x是否None,是None则测试用例通过。
(8) assertIsNotNone(x):断言x是否None,不是None则测试用例通过。
(9)assertIn(a,b):断言a是否在b中,在b中则测试用例通过。
(10) assertNotIn(a,b):断言a是否在b中,不在b中则测试用例通过。
(11)assertIsInstance(a,b):断言a是是b的一个实例,是则测试用例通过。
(12)assertNotIsInstance(a,b):断言a是是b的一个实例,不是则测试用例通过。
三、生成测试报告
1、下载一个文件,HTMLTestRunner.py,复制到项目中
2、使用
四、读取CSV数据
1、创建CSV文件并添加数据
2、创建读取CSV文件
3、在测试类中调用即可
五、xml读取
1、创建xml文件
2、编写读取xml文件的文件
3、调用
第十六单元pytest
一、命名规则
1、先安装pip install pytest 和 pip install pytest-html (生成html报告)
2、类名和方法名必须是以test开头
二、自动生成html测试报告
方式一
1、pytest.main("模块.py")【运行指定模块下,运行所有test开头的类和测试用例】
2、格式:pytest.main(["--html=./report.html","模块.py"])
方式二
1、运行指定模块指定类指定用例,冒号分割,并生成测试报告
2、格式:pytest.main([‘--html=./report.html’,‘模块.py::类::test_a_001'])
方式三
1、Pytest调用语句
-x:出现一条测试用例失败就退出测试
-v:丰富信息模式, 输出更详细的用例执行信息
-s:显示print内容
-q:简化结果信息,不会显示每个用例的文件名
三、Pytest运行方式
1、“.”点号,表示通过
2、F表示失败,Failue
3、E表示用例中存在异常,Error
四、文件读取
(1)读取csv文件:先创建文件,然后读取
(2)读取xml文件
1、创建xml文件
2、编写读取xml文件的文件
3、调用
五、Allure
概念:生成测试报告的框架
1、先配置allure的环境变量
2、验证allure是否配置成功
3、其次要安装allure:pip install allure-pytest
4、allure常用的几个特性
(1) @allure.feature# 用于描述被测试产品需求
(2)@allure.story# 用于描述feature的用户场景,即测试需求
(3)with allure.step():# 用于描述测试步骤,将会输出到报告中
(4)allure.attach# 用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
第十七单元Requests
一、介绍
1、Requests是一个很实用的Python HTTP客户端库,是Python语言的第三方的库,专门用于发送HTTP请求。
2、下载:pip install requests
3、get请求
(1)get无参、get传参
(2)post请求
二、Requests响应
r.status_code 响应状态码
r.heards 响应头
r.cookies 响应cookies
r.text 响应文本
r. encoding 当前编码
r. content 以字节形式(二进制)返回
三、Requests扩充
1.添加等待时间:requests.get(url,timeout=1),如果超过等待时间则报错
2.添加请求头信息:requests.get(url,headers=headers),设置请求头
3.添加文件:requests.post(url,files=files),添加文件
四、Requests+Pytest+Allure
1、流程:(1)读取文件中的数据
(2)requests拿到数据请求接口返回状态码
(3)通过断言验证返回状态码和200对比
(4)生成allure的测试报告
五、读取csv文件
1、通过excel另存为csv即可
2、读取数据:readDemo
3、request请求接口返回状态码
4、pytest断言设置并结合allure生成测试报告
5、测试报告展示
六、 读取excle文件流程
1、存储数据(xlsx)
2、读取数据:readDemo
3、request请求接口返回状态码
4、pytest断言设置并结合allure生成测试报告
5、测试报告展示
第十八单元自动化持续集成
一、概念
1、 就是一套标准的流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)
2、持续集成:频繁地将代码集成到主干。
3、持续交付:指的是,频繁地将软件的新版本,交付给质量团队评审。
4、持续部署:是持续交付的下一步,评审通过后,自动部署到生成环境。
二、Jenkins
1、概念:Jenkins 是一个开源软件项目,是基于Java开发的一种可拓展持续集成工具,主要用于持续、自动地构建 / 测试 / 集成软件项目以及监控一些定时执行的任务。
2、目的:(1)持续、自动地构建/测试软件项目。
(2)监控软件开放流程,快速问题定位及处理,提示开放效率。
3、特性:易于安装、易于配置、通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知、生成 JUnit / TestNG 测试报告、分布式构建、插件支持,支持扩展插件
4、产品发布流程:产品设计成型 → 开发人员开发代码 → 测试人员测试功能 → 运维人员发布上线
三、安装Jenkins.war包
(1)启动方式:在tomcat的bin目录下启动(最常用)
(2)方式2:打开cmd,进入jenkins目录,然后运行命令:java -jar jenkins.war
四、搭建Jmeter+jenkins+ant持续化
(1) Ant下载及配置安装
下载Apache-ant
解压到你想要安装的目录
配置环境变量
验证是否安装成功
拷贝Jemter包到ant下
新建一个build.xml文件
(2)进行命令行模式后,进入刚才创建的xml文件存放目录,如:D:\build 输入ant即可
五、集成jenkins
打开Jenkins,配置Ant环境
新建一个自由风格任务
构建触发器
构建配置
配置HTML插件
立即构建
针对报告中不显示聚合报告的情况
Jenkins执行自动化测试后发送测试报告邮件
第十九单元自动化
一、自动化测试的好处
1、 缩短测试周期:计算机行业更新迭代快速,大量频繁的回归测试消耗时间,自动化测试能够将重复的实行交给计算机去做,加快测试速度。
2、避免人为出错:测试人员不可能持续高度集中,并且人类易受外界影响(头疼脑热,精神不振),可能会造成人为错误
3、测试信息存储:自动化测试将测试信息和数据储存在文件中,思路清晰明确,交接方便
4、轻易获取覆盖率:自动化测试能够解放测试人员,使测试人员能够有更多的精力做那些非重复性的工作。
5、其他:自动化测试可以是实现自动或者定时执行
注意:自动化测试的方向是对的,而且趋势也是如此,但是有些自动化实现不了的还是会手动测试的。
二、自动化分类
1、 整体分类
(1)自动化功能测试
(2)自动化性能测试
2、自动化功能测试的分类:
(1)单元测试:程序员搞定
(2)功能测试
(3)接口测试:大中型项目或长期项目可以采用自动化测试
3、性能测试主要是使用测试工具
(1)Loadrunner、Jmeter等,对软件进行压力测试、负载测试等等,因为这些无法用手工进行代替,所以必须自动化。
三、web自动化条件的使用和范围
1、前提条件
(1)手动测试已经完成,后期再不影响进度的前提下逐渐实现自动化
( 2)项目周期长,重复性的工作都交给机器去实现
( 3)需求稳定,项目变动不大
(4)自动化测试脚本复杂度比较低
( 5)可重复利用
2、使用自动化测试的场景
(1)频繁的回归测试
(2)冒烟测试
(3)传统行业需求变化不大,应用频繁
(4)性能测试
四、web自动化常用的工具
1、QTP(收费)
2、Selenium(开源)
3、RFT(收费)
4、(1)元素定位工具:css选择器、xpath
(2)环境工具:(1)firefox35
(2)firebug插件
(3)firepath插件
5、什么是xpath:XPath即为XML路径语言,它是一种用来(标准通用标记语言的子集)在 HTML\XML 文档中查找信息的语言。
6、什么是xml:XML 指可扩展标记语言(EXtensible Markup Language)XML 是一种标记语言,很类似 HTMLXML 的设计宗旨是传输数据,而非显示数据
7、(1)xml是设计为传输和存储数据的。
(2)html是显示数据以及更好的显示数据
8、获取元素
(1)nodename:选取此节点的所有子节点
(2)/从根节点选取
(3)//从匹配选择当前节点选择文档的节点,不考虑位置
(4)“.”选取当前节点
(5)“..”选取当前节点的父节点
(6)@选取属性