产生原因:
我们知道html是如这些标签包含的格式化文本,当用浏览器打开时,浏览器内部的标签解释器把不同的标签解释为不同的含义。这时默认所有内容都是在标签之内的,标签本身并不是内容。如果内容中也有标签怎么办?这是个问题吗?当然。当一个负责讲解html是什么的页面输出时,html页面中必然包含有标签需要输出显示,而浏览器并不能智能的分清楚哪些是需要解释哪些不需要。
解决方法:
其中一个办法就是转义。为了区分需要解释和不需要解释的<>,将不需要解释的<>用转义字符代替,html会将它们解释为<>。和html一样,其他编程语言也有一些内置特殊符号需要用这样的方法处理,比如php中的$,下面列举一些:
如HTML转义符、java 转义符、xml 转义符、 oracle 转义符、sql 转义符 、sqlserver 转义符、php 转义符、asp 转义符、vb转义符、 javascript 转义符等等,还有网址中的百分号。
转义字符串有三部分组成:
&符号+实体名称/编号+;符号
例如,HTML的< >&"©的转义字符串分别是
“&lt;”或者“&#60;”
“&gt;”或者“&#62;”
“&amp;”或者“&#38;”
“&quot;”或者“&#34;”
“&copy;”或者“&#169;”
在高级编程语言中已经将转义字符的转义处理做成了函数。如php中的htmlspecialchars()负责将函数参数转为对应的转义字符串
)JavaScript基本组成
1.1基本语法几乎所有浏览器基本都支持,有专门的机构制定统一标准
1.2Dom(文档对象)浏览器基本都支持,但有的可能会有差别到时再说(重点)
1.3Bom(浏览器对象)一般功能性的浏览器支持这个没有统一的标准,主要操作如打开关闭浏览器窗口,获取屏幕的分辨率screen,XmlHttpRequest(异步对象)等
2)JavaScript的语法
2.1Javascript严格区分变量的大小写;比如 a与A代表的是两个不同的变量
2.2Javascript中声明变量时只有一个关键字var(ES5),Javascript是一个弱类型的编程语言;比如声明一个变量a var a; a=3(数值) 或者a="3"(字符串)都是正确的,与C#中的不一样;每条语句后加分号(分号建议加上)
如果变量使用前不用var声明,这样的变量就变成了“全局变量”
2.3Javascript中的注释,与C#的相同 //单行注释、/* 多行注释 */
2.4变量的命名规则:以字母,下划线或$开头,中间可以包括任意的字母,数字,下划线或$。(与C#相比变量命名中多了一个$)
2.5JavaScript中即可以使用双引号或者单引号声明字符串变量,主要是为了方便和html的兼容,避免转义符的麻烦
2.6每次修改过JavaScript中的代码后直接保存,在浏览器中刷新即可
3)JavaScript代码
javascript代码需要写在<script></script>标签中而<script>标签可以写在<head>,<body>等任意位置,一个网页中也可以有多个<script></script>标签(此标签最好是成对出现)
<script>标签标准格式:<script type="text/javascript">js代码</script>
如果<script>标签放到<head>中,则代码在body加载之前就已经运行了;如果写在body中的<script>是随着页面的加载而一个个执行的
如果代码运行遇到错误,有错误的<script></script>中的代码不会执行,但也不会影响后面的其他<script></script>中的代码和html的显示
JavaScript代码可以直接写在网页中,也可以将JavaScript代码写到单独的js文件中,其扩展名就是**.js, 写好此js文件后在页面中再引入此文件;建议写在网页的最后,因为javascript代码执行顺序是从上到下依次执行,如果引用文件写在head中很大可能会报错(操作DOM对象)
<script src="文件名.js" type="text/javascript"></script> src后面的路径为相对路径
查看javascript代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>JavaScript</title>
<script type="text/javascript">
// javascript代码 单行注释
/* javascript代码 多行注释*/
var a=3;
alert(a);//弹出对话框
a="3";
alert(a);
</script>
</head>
<body>
</body>
<script src="**.js" type="text/javascript">只能引用文件,不能书写代码</script>
</html>
alert(a);自己查看弹出的对话框的值
上一篇:主要介绍线程组、HTTP请求默认值、用户定义的变量、固定定时器的应用场景及实战。
以下主要介绍正则表达式提取器、调式取样器(Debug Sampler)、响应断言、HTTP信息头管理器的应用场景及实战。
1、使用场景
从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。比如登录后,用正则表达式获取token,其他接口携带token请求。
2、正则表达式提取器界面说明
②创建的正则表达式提取器页面如下:
APPly to:
要检查的响应字段:
引用名称:
提取结果之后的变量名称,即下个请求需要引用的值,后面引用方式是${变量名}。
正则表达式:
使用正则表达式解析响应结果,()括号表示提取字符串中的部分值,前后是提取的边界内容。
一般通用的正则表达式(.+?)。
如需了解更多关于正则表达式知识,可参照:Python自动化测试-正则表达式解析一文。
模板:
如果正则表达式有多个提取结果,则结果是数组形式。若只有一组表达式,则使用$,两组正则匹配使用$$,以此类推。
匹配数字:
正则表达式匹配数据的结果可以看做一个数组:-1表示全部,0表示随机,1表示第一个,2表示第二个,依次类推。
缺省值:
如果参数没有取到值,那默认给个值,比如null。
3、实战小例子
提取登录响应结果的token:
②创建一个HTTP请求,用来发送登录请求,登录接口请求参数配置如下。
③HTTP请求,右键,创建一个正则表达式提取器。
先来看下登录接口返回结果:
{
"data": {
"mobile": "12345678",
"id": 500,
"rid": 0,
"email": "adsfad@qq.com",
"username": "admin",
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE1OTA5MDY3MzAsImV4cCI6MTU5MDk5MzEzMH0.M3CWrgsDUMvnhkprQMBJ1wWY5OKO-mKiOD4EJ2YV4zc"
},
"meta": {
"msg": "登录成功",
"status": 200
}
}
正则表达式提取token,配置如下:
④创建一个察看结果树,运行后,接口返回如下:
(Debug Sampler)
1.使用场景
主要用于打印出变量进行调试。比如上面例子,虽然用正则表达式提取了token,但我们并不知道token是否有正确提取,可以使用调式取样器查看。
2.调试取样器界面说明
①线程组右键,依次点击添加--》取样器--》Debug Sampler。
②调式取样器界面如下:
有三个参数Jmeter 属性,选项值默认即可。
Jmeter 属性,系统属性,一般不会变,不需要调试。
Jmeter 变量调试的是Jmeter中自定义的变量,包含如下这些自定义变量:
3.实战小例子
①创建线程组、HTTP请求、正则表达式提取器、察看结果树(介绍正则表达式实战例子有,这里省略创建步骤)。
②创建调式取样器(debug sampler),不需要修改,默认即可。
③运行,在察看结果树中,选择调试取样器,可以看到token已经正常获取到。
注意:一般来说调式取样器(debug sampler)用于自测使用,上线时可以删除。
1.使用场景
在接口测试过程中,需要判断接口返回结果是否正确。
2.响应断言界面说明
①HTTP请求,右键,依次选择添加--》断言--》响应断言。
②响应断言界面如下:
Apply to:
测试字段:
响应文本:响应正文。(常用)。
响应代码:响应状态码,比如200、304、404等。
响应信息:响应消息。,比如OK、Not Modified、Not Found等。
响应头:响应请求头。
请求头:请求头。
URL样本:请求的url。
文档(文本):从各种类型的文档中提取文本。此选项开启也会严重影响性能,谨慎使用。
忽略状态:忽略响应状态。
请求数据:请求的body内容。
模式匹配规则:
包括:如果文本包含正则表达式模式,则为true。
匹配:如果整个文本与正则表达式模式匹配,则为true。
相等: 如果整个文本等于模式字符串(区分大小写),则为true。
字符串:如果文本包含模式字符串(区分大小写),则为true。
否:对断言结果进行否定。
或者:将多个测试模式以逻辑“或”组合起来。
3.实战小例子
①创建线程组、HTTP请求、正则表达式提取器、察看结果树(上面实战例子有写,这里省略创建)。
②HTTP请求右键,创建一个响应断言。我们再来看下响应结果的信息:
{
"data": {
"mobile": "12345678",
"id": 500,
"rid": 0,
"email": "adsfad@qq.com",
"username": "admin",
"token": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE1OTA5MDY3MzAsImV4cCI6MTU5MDk5MzEzMH0.M3CWrgsDUMvnhkprQMBJ1wWY5OKO-mKiOD4EJ2YV4zc"
},
"meta": {
"msg": "登录成功",
"status": 200
}
}
断言的方式可以多种,比如断言msg、status或者msg、status一起断言,甚至你用其他返回的字段也是可以的。
这里我们用msg断言,配置如下:
③运行后,如断言失败,在察看结果树里http请求会红色显示。
四、HTTP信息头管理器
1.使用场景
在接口测试中,有时候需要携带请求头,比如接口需要携带token进行请求,token需要放在请求头里。
2.HTTP信息头管理器界面说明
①线程组,右键,依次点击添加--》配置元件--》HTTP信息头管理器。
②HTTP信息头管理器界面如下:
HTTP信息头管理器比较简单,直接添加请求头信息的键值对就可以。
3.实战小例子
①创建线程组、HTTP请求、正则表达式提取器、察看结果树、响应断言(上面实战例子有写,这里省略创建步骤)。
②线程组下,新建一个HTTP消息头管理器。
在上面介绍正则表达式提取器,我们已经将登录后的token用正则提取出来了,这里直接引用,相当于全局设置了token,其他接口请求时会自动在请求头带上token。
在HTTP信息头管理器引用token如下:
③线程组右键,新建一个http请求,用于请求用户数据列表接口。
④运行后,发现用户数据列表接口在请求头自动携带了token。
总结:本文主要介绍正则表达式提取器、调式取样器(debug sampler)、响应断言、HTTP信息头管理的应用场景及实战。
今日问题:
你在使用Jmeter过程中,常用的元件或插件有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。