华为云用户手册

  • 日期/时间 分类 规则 示例 示例结果 日期 @date @date() "2015-05-09" @date(format) @date("yyyy-MM-dd") "2012-11-08" @date("yy-MM-dd") "10-06-12" @date("yyyy yy y MM M dd d") "1971 71 71 05 5 02 2" 时间 @datetime @datetime() "1996-15-11 01:18:47" @datetime(format) @datetime("yyyy-MM-dd A HH:mm:ss") "1978-01-10 AM 03:59:54" @datetime("yy-MM-dd a HH:mm:ss") "98-09-03 下午 19:32:44" 当前时间 @now @now() "2022-11-30 12:46:12" @now(unit) @now("year") "2022-01-01 00:00:00" @now("month") "2022-08-01 00:00:00" @now("week") "2022-08-09 00:00:00" @now("day") "2022-08-11 00:00:00" @now("hour") "2022-08-11 15:00:00" @now("minute") "2022-08-11 15:24:00" @now("second") "2022-08-11 15:24:02" @now(format) @now("yyyy-MM-dd HH:mm:ss SS") "2022-08-11 15:24:02 761" @now(unit,format) @now("day", "yyyy-MM-dd HH:mm:ss SS") "2022-08-11 00:00:00 000" 时间戳 @timestamp(format) @timestamp("s") "1662605353" @timestamp("ms") "1662605408838"
  • 基础类型 分类 规则 示例 示例结果 布尔值 @boolean @boolean() false,true @boolean(min,max,current) @boolean(1,9,true) false,true 自然数 @natural @natural() 1350447356 @natural(min) @natural(10000) 819989031 @natural(min,max) @natural(60,100) 63 整数 @integer @integer 1128800169 @integer(min) @integer(10000) 29427959 @integer(min,max) @integer(60,100) 94 浮点数 @float @float() 13425418.3 @float(min) @float(0) 1800545158.8 @float(min,max) @float(60,100) 98.63203 @float(min,max,dmin) @float(60,100,3) 69.882191 @float(min,max,dmin,dmax) @float(60,100,3,5) 80.14955 单字符 @character @character() "7" @character(pool) @character("lower") "x" @character("upper") "R" @character("number") "6" @character("symbol") "#" @character("aeiou") "i" 字符串 @string @string() "%#Vwj" @string(length) @string(5) "^16)1" @string(pool,length) @string("lower",5) "zrcmq" @string("upper",5) "PFTFP" @string("number",5) "96480" @string("symbol",5) "#&!!(" @string("aeiou",5) "uoauu" @string(min,max) @string(7,10) "0B(6!)5[)" @string(pool,min,max) @string("lower",1,3) "zz" @string("upper",1,3) "OZJ" @string("number",1,3) "61" @string("symbol",1,3) "@%" @string("aeiou",1,3) "au" 范围 @range(stop) @range(10) [0,1,2,3,4,5,6,7,8,9] @range(start,stop) @range(3,7) [3,4,5,6] @range(start,stop,step) @range(1,10,3) [1,4,7]
  • 背景介绍 随着微服务系统及分布式架构的发展,多模块或子系统的依赖为软件系统的开发与测试带来了很多挑战。比如在测试某个模块时,依赖的第三方服务不能返回想要的结果,或第三方服务不稳定时,该模块的测试进度则会受到影响。 Mock服务能很好解决这些问题,使用场景如下: 并行开发:在被依赖模块未开发完成时,使用Mock服务替代真实业务服务场景,可进行并行开发。 依赖服务不稳定:当依赖服务不稳定时,会导致自动化测试用例失败,使用Mock服务替代真实服务,可以保证自动化测试稳定执行,提升流水线的健壮性。 构造异常场景:测试时需要构造某些异常数据或延迟响应等异常场景,真实服务通常无法满足需求,使用Mock服务替代可以快速构造异常场景,提升测试覆盖率。 前后端分离开发:前端开发往往依赖于后端数据接口,在后端接口就绪之前,前端往往很难推进,前端可以通过Mock功能制造场景数据接口来进行开发与调试。 父主题: API Mock
  • 执行流程 CodeArts API提供基于JavaScript的脚本引入,通过脚本可以实现在快捷调试或接口请求时添加动态行为。脚本执行流程如图: CodeArts API兼容Postman脚本语法,可以将Postman脚本迁移到CodeArts API中使用。 CodeArts API脚本能力仅限于快捷调试、接口调试、接口调试用例。 接口的前置脚本与后置脚本支持配置多个,并按照配置顺序执行。 CodeArts API支持脚本输入提示。 父主题: 脚本能力
  • 对于响应的处理 pm.response 在后置脚本中pm.response接口请求完成后返回响应信息,Response SDK 参考。 response包含了以下结构: pm.response.code:Number:获取响应码。 pm.response.status:String:获取响应状态。 pm.response.headers:HeaderList:获取响应头。 pm.response.responseSize:Number:获取响应大小。 pm.response.text():Function:以文本形式输出响应体。 pm.response.json():Function:以json形式输出响应体。 pm.response.setBody(''):设置响应体。 pm.response.headers.get:从响应头中获取指定参数的值,Response SDK 参考。 后置脚本中使用“pm.response.headers.get”命令可以获取响应头中指定参数的值。例如想要获取响应Header中date参数的值,那么可以在后置操作中输入如下自定义脚本: var test = pm.response.headers.get("date"); console.log(test);
  • 对于发送请求的处理 pm.sendRequest pm.sendRequest:Function用于脚本异步发送HTTP/HTTPS的请求。 更多参数信息请查阅Collection SDK 文档 。 在前置脚本和后置脚本都可以使用。 更多参考: Request JSON 结构 Response 结构 // 使用字符串URL示例 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } else { pm.variables.set("variable_name", "new_value"); } }); // 完整请求示例 const echoPostRequest = { url: "https://postman-echo.com/post", method: "POST", header: { header_name1: "value1", header_name2: "value2", }, // body 为 x-www-form-urlencoded 格式 body: { mode: "urlencoded", // 此处为 urlencoded // 此处为 urlencoded urlencoded: [ { key: "account", value: "codeartsapi" }, { key: "password", value: "123456" }, ], }, /* // body 为 form-data 格式 body: { mode: 'formdata', // 此处为 formdata // 此处为 formdata formdata: [ { key: 'account', value: 'codeartsapi' }, { key: 'password', value: '123456' } ] } // body 为 json 格式 header: { "Content-Type": "application/json", // 提醒:header中需要添加Content-Type }, body: { mode: 'raw', raw: JSON.stringify({ account: 'codeartsapi', password:'123456' }) } // body 为 raw 或 json 格式 body: { mode: 'raw', raw: 'body内容' } */ }; pm.sendRequest(echoPostRequest, function(err, resq) { console.log(err ? err : resq.json()); }); // 对返回结果进行断言 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } pm.test("response should be OK to process", function() { pm.expect(err).to.equal(null); pm.expect(resq).to.have.property("code", 200); pm.expect(resq).to.have.property("status", "OK"); }); });
  • 对于请求的处理 pm.request pm.request对象可以在脚本中对请求数据进行访问,Request SDK 参考。在前置脚本中表示即将运行的请求,在后置脚本中,表示已经运行的请求。 pm.request包含了以下结构: pm.request.url:Url:获取当前请求的URL。 pm.request.getBaseUrl():获取运行中环境选择的前置URL。 pm.request.method:String:获取当前请求的方法,如GET、POST等。 pm.request.headers:HeaderList:获取当前请求的headers列表。 pm.request.body:RequestBody:获取当前请求的body体。 pm.request.headers.add({ key: headerName:String, value: headerValue:String}):function:为当前请求添加指定键和值的header。 pm.request.headers.remove(headerName:String):function:删除当前请求里指定键的header。 pm.request.headers.get(headerName:String):function:获取请求里指定名称的header。 pm.request.headers.upsert({ key: headerName:String, value: headerValue:String}):function:插入指定键和值的header(如果header不存在则新增,如果header已存在则修改)。 pm.request.auth:获取请求的身份验证信息。
  • pm pm:Object pm对象,含有接口运行关联信息。可利用它获取或设置环境变量和全局变量,且访问请求信息和返回结果信息。 pm:info:Object pm.info对象,含有接口运行关联信息。 pm.info.eventName:String:获取当前执行的脚本类型:前置脚本(prerequest),后置脚本(test)。 pm.info.iterationCount:Number:返回执行循环的总次数,仅集合测试有效。 pm.info.iteration:Number:获取当前执行循环(iteration)次序,仅集合测试有效。 pm.info.requestId:String:获取运行中接口用例的唯一ID。 pm.info.requestName:String:获取运行中接口用例名称。
  • 设计API 接口文档应针对以下要素进行设计: 接口基本信息 接口路径 请求方式 接口请求参数 接口返回响应 安全方案 接口基本信息 填写接口的基本信息,包括: 名称:接口名称。 摘要:接口的摘要信息。 状态:API生命周期的状态,包括设计中、联调中、测试中、测试完、已发布、将废弃、已废弃。 所属目录:接口在项目中所属的目录。 所属Tags:接口所属的Tags,可以直接选择所属目录信息当作所属Tags,也可以在所属Tags框中手动输入Tag名再回车来生成所属Tags。 描述:可添加接口的相关描述,包括接口功能、使用注意事项、使用场景定义等详细描述信息,接口描述支持通用Markdown语言编辑。 接口路径 接口的URL,客户端可以通过接口路径向服务端发起请求。以“/”开头,如:“/car”、“/car/{owner}”。 接口路径一般不包含域名和http、https协议名,如需加上域名进行调试,在调试功能页面有相应处理。 大括号“{}”中间的字符串表示Path参数。 不支持通过接口路径来添加Query参数,如:“/car?owner=zhangsan”。 请求方式 定义接口的请求方式,制定了客户端对服务端资源操作的方法,在API设计过程中,需要根据业务和操作类型选择合适的请求方式。 GET(获取):用于获取指定资源,使用查询参数传递参数,适用于读取资源和查询数据。 POST(提交):用于提交数据。POST请求可以传递请求体参数,适用创建新资源、提交表单数据或执行某些操作等场景。 PUT(更新):用于更新或替换服务端的指定资源。 DELETE(删除):用于删除服务端的指定资源。 OPTIONS(选项):用于获取服务器支持的http方法和资源的相关信息。可用于客户端与服务端之间的握手过程,了解服务器所支持的方法和功能。 HEAD(请求头):与GET类似,但只返回响应头部,不返回实体内容,用于获取资源的元信息,如:文件大小、修改日期等。 PATCH(补丁):用于对资源进行局部更新。PATCH请求类似于PUT请求,但是只更新资源的一部分。 TRACE(跟踪):用于简历与代理服务器的隧道连接,通常用于进行安全的SSL/TLS加密通信。 接口请求参数 Params、Path、Header、Cookies Query参数:接口请求中的一种参数传递方式,它通常用于传递一些可选的参数,比如过滤条件、排序方式、分页参数等。在URL中表现为末尾“?”后的字符串(如:“/car?owner=zhangsan”,那么“owner=zhangsan”即Query参数,其中“owner”为参数的key,“zhangsan”为参数的value)。 Path参数:也称为“路径参数”,是API请求中的一种参数传递方式。在URL中表现为大括号“{}”括起来的字符串(如:“/car/{owner}”,那么“{owner}”表示key为“owner”的Path参数)。 Header参数:请求头中的参数。 Cookies:类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 前置脚本:CodeArts API支持接口前置脚本操作,详见脚本能力。 后置脚本:CodeArts API支持接口后置脚本操作,详见脚本能力。 请求体 在发起http请求时,需要带上一些参数以便服务器处理,通过http请求体传递的参数被称为Body参数。Body参数包含在请求的主体部分中,通常是一些表单数据、JSON数据或者二进制数据。在发送请求时,会根据Body参数类型,自动在请求Header中添加对应Content-Type参数。若手工设置Content-Type的类型,则必须与Body的参数类型匹配,否则系统会自动忽略掉手动设置的Content-Type值。 none:无body参数。 application/json:json格式数据。Content-Type为 “application/json”。 application/xml:xml类型数据,用于标识文件和图像等没提类型,也可以标识结构化数据。Content-Type为 “application/xml”。 multipart/form-data:表单数据。Content-Type为 “multipart/form-data”。 application/x-www-form-urlencoded:将表单数据编码后传输到服务器。数据被编码为一系列键值对,每个键值对之间以&连接,并且键与值之间以=分隔。Content-Type为“application/x-www-form-urlencoded” 。 此外,还支持根据Body体数据结构自动生成示例,或将手工编写Body示例智能导入数据结构中。 接口返回响应 返回响应的定义包含:返回响应的状态码、响应内容的数据结构、响应示例和响应头。 返回响应的状态码:通过加号来添加运行接口后可能的响应状态码,单击响应状态码可以对状态码进行修改。 响应内容的数据结构:规定响应内容的格式,分为“application/json”、“application/xml”、“text/plain”三种,“application/json”和“application/xml”两种情况下可以对响应内容的结构进行进一步定义,如:响应内容为“application/json”,规定json内容里的参数类型等。 响应示例:响应内容的示例。 响应头:返回响应的Header。 返回响应也可以直接引用公共模型中已定义好的“公共响应”,并且支持自动生成响应示例。 安全方案 OpenAPI规范中,安全模型对应OpenAPI3.0的components.securitySchemes。大部分的Web服务都需要经过身份认证才能访问,security就是用于描述API的安全信息和访问授权协议等信息的对象,Open API支持的最常见授权方案如下: API key HTTP Oauth2.0 OpenID Connect 安全方案引入需要在公共模型中建立安全模型,详见•安全模型。
  • 手动导入 通过主页面的“更多功能”选项或单击左上角搜索框旁边的,可以展示当前支持的导入选项,可根据需要选择。 导入文件 选择响应格式的文件并上传,然后选择文件中系统识别出来的接口和数据模型导入。 一个文件导入后,将会视为一个根目录,一个根目录中不允许存在URL相同的接口。 文件重复导入,则新接口默认覆盖原接口。 Postman支持Collections和Environment数据集ZIP包的全量导入,也支持单个Collection文件导入。 导入URL 选择“导入Swagger URL”,输入URL,即可完成文档导入。 通过Swagger URL导入时,需要填写json数据文件的URL,而非Swagger UI的URL。
  • 配置请求规则 请求Mock服务时,系统会根据规则中配置的参数匹配,只有规则下所有参数满足匹配条件时,才可匹配到整个规则。 请求参数,支持Query、Path、Header、Body。 Path参数只有在当前选择的接口的url中存在path变量时才可以显示配置。 Body支持json和xml格式。当请求体为json格式时,匹配规则会同时匹配json中的key和value。 无法保存重复规则。如果同一个接口下的不同规则配置内容一致,会提示无法保存规则。
  • 使用方式 /** * 示例一:该示例引入加密算法模块 crypto-js,并使用其中 AES 对 message 进行加解密 * @param message 需要加密的文本 * @param key 秘钥 */ function cryptoJSTest(message, key) { const CryptoJS = require('crypto-js'); // 加密 const ciphertext = CryptoJS.AES.encrypt(message, key).toString(); // 解密 const bytes = CryptoJS.AES.decrypt(ciphertext, key); const originalText = bytes.toString(CryptoJS.enc.Utf8); console.log(originalText); } cryptoJSTest('test message', 'secret key'); /** * 示例二:该示例引入 uuid 模块生成一段 uuid,并引入 btoa 模块进行 Base64 编码 */ function uuidBtoaTest() { const uuid = require('uuid'); const btoa = require('btoa'); const id = uuid.v4(); const base64EncodedId = btoa(id); console.log(id); console.log(base64EncodedId); } uuidBtoaTest(); /** * 示例三:该示例引入 lodash 模块,并测试了其中的 uniq 对数组去重 */ function lodashUniqTest() { const lodash = require('lodash'); const arr =[1, 2, 1, 5, 1, 9] const uniqArr = lodash.uniq(arr); console.log(uniqArr.toString()) } lodashUniqTest();
  • 内置类库列表 断言 chai (v4.2.0):用于断言BDD/TDD断言。 加密解密库 jsrsasign(10.3.0):用于RSA加密/解密。 Encode、Decode 库 crypto-js(v3.1.9-1):编码/解码库,基本包含常用的编码、解码方式,如Base64、MD5、SHA、HMAC、AES等等。 require方法只允许使用整个模块,不能单独使用类库里的某个子模块,具体看本文档末尾说明。 atob(v2.1.2):用于Base64解码。 btoa(v1.2.1):用于Base64编码。 tv4(v1.3.0):用于校验JSONSchema。 xml2js(v0.4.19):用于XML转JSON。 JSONSchema校验库 ajv(v6.6.2):校验JSONSchema。 实用工具 postman-collection( v3.4.0):Postman Collection库。 cheerio(v0.22.0):jQuery的子集。 lodash (v4.17.11):JS实用工具库。 uuid :生成UUID。 moment(v2.22.2):日期处理库 (不含 locales)。 mockjs:模拟数据生成,拦截Ajax请求。 csv-parse/lib/sync( v1.2.4):处理 CS V格式数据。 iconv-lite:用于字符编码转换,支持数十种字符编码格式的转换。 内置NodeJS模块 path:处理文件路径。 assert:提供一组断言测试。 buffer:处理二进制数据。 util:实用函数的集合。 url:解析URL字符串。 querystring:处理URL,查询字符串。 punycode:字符编码方案。 string-decoder:将Buffer对象解码为字符串。 stream:处理流数据。 events:处理事件。 timers:在给定的毫秒数后调用函数。 通过require方法可以直接使用CodeArts API内置的JS类库。 var cryptoJs = require("crypto-js"); console.log(cryptoJs.SHA256("Message"));
  • Markdown设计 新建Markdown,可通过以下三种方式完成。 方法一:单击“新建 Markdown”图标。 方法二:单击目录树搜索框右侧的,在弹出的下拉框中,选择“新建Markdown”。 方法三:在目录树中选择一个目录,单击右侧图标,在弹出的下拉框中,选择“新建Markdown”。 进入“新建标签页”,在该标签页可以编辑Markdown文件,主要包括:目录、名称、正文。 目录:在上一步中,如果通过方法一和方法二新建Markdown,目录初始内容为空,可以手动选择;如果通过方法三新建Markdown,目录会自动生成为选中的目录,也可以手动修改。 名称:可根据业务需要自定义命名,不能为空。命名规则:只支持中文、英文、下划线、数字和“.”,且以中英文开头,长度为3-64个字符。 正文:可手动输入文字,也可使用组件插入特定的内容,如:表格、超链接、图片;正文样式也可以使用组件进行调整;正文编辑支持全屏模式;在左侧编辑正文时,右侧会同步展示编辑内容,便于查看、修改样式等。 编辑完成后,单击右上角“保存”,左侧目录树同步刷新,界面会自动跳转到文档页面,展示名称、正文,上方标签页的名称也会更新为Markdown文件名称。 移动Markdown(可选)。 单击并拖拽Markdown到目标目录后释放即可,移动成功后,目录树会自动刷新,Markdown文件的目录也会同步改变。 Markdown文件只能在同一根目录下进行移动。 处于编辑页面的Markdown文件不能移动。 父主题: API设计
  • 请求体 在Body页签中,可以查看请求体,目前支持的请求体有如下几类: none:无body参数。 form-data:Content-Type为“multipart/form-data”,可以输入请求体中每个参数的类型、名称和值。 application/x-www-form-urlencoded:Content-Type为“application/x-www-form-urlencoded”,可以输入请求体中每个参数的名称和值。 raw:在文本框中输入文本内容,在“raw”选项旁边可以下拉选择输入文本内容格式,如Text和Json。 请求参数的默认值均来自API设计的样例值。 在API调试页面修改请求参数,不能保存至API设计与API文档中。
  • 接口路径 API调试页面的接口路径,可以选择http或https,并在定义的路径前自动添加了域名。添加的域名是在右上角选择的环境参数中定义的,单击左侧下拉箭头可在不同运行环境间切换,单击下拉箭头右上角按钮,可进行环境参数配置。 针对各个环境,默认提供变量“hostURL”参数作为添加到接口前的域名,从而拼接成完整地址。 可以看到对应环境“默认环境”中的“hostURL”参数的值“127.0.0.1:8080”被添加到接口URL前,作为整个路径的域名。鼠标悬浮在路径前,提示次前置URL来自于哪一环境,单击环境名称,可直接跳转至相应环境下进行编辑。 路径中大括号“{}”中的字符串表示Path参数。 路径中“?”后的字符串表示Query参数。 如果在调试页面路径栏下方的Query属性框中,对Query参数进行修改,路径中的Query参数也会同步变化。
  • 断言 可以利用后置脚本验证API响应返回结果的正确性。 // 示例1:pm.response.to.have pm.test('Response status is 200', function() { pm.response.to.have.status(200); }); // 示例2:pm.expect() pm.test('this is production', function() { pm.expect(pm.environment.get('env')).to.equal('production'); }); // 示例3:response assertions pm.test('no error', function() { pm.response.to.not.be.error; pm.response.to.have.jsonBody(''); pm.response.to.not.have.jsonBody('error'); }); // 示例4:pm.response.to.be* pm.test('no error', function() { // 断言结果:info, success, redirection, clientError, serverError, are other variants pm.response.to.be.ok; // 断言有body,并且是json格式 pm.response.to.be.withBody; pm.response.to.be.json; });
  • API开发 CodeArts API支持生成接口请求代码和业务代码,缩短前后端开发时长,规范代码结构。 基于接口定义,CodeArts API支持自动生成各种语言和框架的请求代码和业务代码。在API设计模块,接口文档界面右侧,即可看到“生成代码”的入口。 生成接口请求代码 单击“生成代码”下拉框,选择“生成接口请求代码”,弹出“生成接口请求代码”对话框。 支持生成多种语言的接口请求代码,单击右上角,可一键复制并直接粘贴,支持编辑修改和代码格式化。 生成业务代码 单击“生成代码”下拉框,选择“生成业务代码”,弹出“生成业务代码”对话框。 根据需要选择语言、生成范围(包括“仅当前接口及关联模型”和“整个项目”),单击“生成”将生成的代码存储到本地,开发者可以将代码复制到本地的研发工具(如IntelliJ IDEA)。
  • Name相关 分类 规则 示例 示例结果 英文名 @first @first() "Michelle" 英文姓 @last @last() "Williams" 英文姓名 @name @name() "Michelle Williams" @name(middle) @name(true) "Karen Lisa Harris" @name(false) "Karen Harris" 中文姓 @cfirst @cfirst() "张" 中文名 @clast() @clast() "三" 中文姓名 @cname @cname() "张三"
  • Helper 分类 规则 示例 示例结果 全大写 @upper(str) @upper("hello") "HELLO" 全小写 @lower(str) @lower("HELLO") "hello" 多选一 @pick(arr) @pick(["hello", "test", "test3"]) "hello" @pick([1, 5, 10, 60, 80]) 10 @pick([1,"hello","中国",true,80]) true
  • Address相关 分类 规则 示例 示例结果 区域 @region @region() "西北" 省或直辖市、自治区、特别行政区 @province @province() "陕西省" 市 @city @city() "西安市" @city(prefix) @city(true) "陕西省 西安市" @city(false) "西安市" 县 @county @county() "蓝田县" @county(prefix) @county(true) "陕西省 西安市 蓝田县" @county(false) "蓝田县" 邮政编码 @zip @zip() "710500"
  • Web 相关 规则 示例 示例结果 @url @url() "http://ihum.md/xmicdyn" @url(protocol) @url("http") "http://ckpvjgyc.eg/jzatazzvm" @url(protocol,host) @url("http","test.com") "http://test.com/pmuway" @protocol @protocol() "ftp" @domain @domain() "ljmhm.gu" @domain(tld) @domain("com") "dtcboprfg.com" @tld @tld() "com" @email @email() "e.fsysqt@vjz.edu" @email @email("test.com") "e.fsysqt@test.com" @ip @ip() "xxx.xxx.xxx.xxx"
  • 基础类型 分类 规则 示例 示例结果 布尔值 @boolean @boolean() false,true @boolean(min,max,current) @boolean(1,9,true) false,true 自然数 @natural @natural() 1350447356 @natural(min) @natural(10000) 819989031 @natural(min,max) @natural(60,100) 63 整数 @integer @integer 1128800169 @integer(min) @integer(10000) 29427959 @integer(min,max) @integer(60,100) 94 浮点数 @float @float() 13425418.3 @float(min) @float(0) 1800545158.8 @float(min,max) @float(60,100) 98.63203 @float(min,max,dmin) @float(60,100,3) 69.882191 @float(min,max,dmin,dmax) @float(60,100,3,5) 80.14955 单字符 @character @character() "7" @character(pool) @character("lower") "x" @character("upper") "R" @character("number") "6" @character("symbol") "#" @character("aeiou") "i" 字符串 @string @string() "%#Vwj" @string(length) @string(5) "^16)1" @string(pool,length) @string("lower",5) "zrcmq" @string("upper",5) "PFTFP" @string("number",5) "96480" @string("symbol",5) "#&!!(" @string("aeiou",5) "uoauu" @string(min,max) @string(7,10) "0B(6!)5[)" @string(pool,min,max) @string("lower",1,3) "zz" @string("upper",1,3) "OZJ" @string("number",1,3) "61" @string("symbol",1,3) "@%" @string("aeiou",1,3) "au" 范围 @range(stop) @range(10) [0,1,2,3,4,5,6,7,8,9] @range(start,stop) @range(3,7) [3,4,5,6] @range(start,stop,step) @range(1,10,3) [1,4,7]
  • 日期/时间 分类 规则 示例 示例结果 日期 @date @date() "2015-05-09" @date(format) @date("yyyy-MM-dd") "2012-11-08" @date("yy-MM-dd") "10-06-12" @date("yyyy yy y MM M dd d") "1971 71 71 05 5 02 2" 时间 @datetime @datetime() "1996-15-11 01:18:47" @datetime(format) @datetime("yyyy-MM-dd A HH:mm:ss") "1978-01-10 AM 03:59:54" @datetime("yy-MM-dd a HH:mm:ss") "98-09-03 下午 19:32:44" 当前时间 @now @now() "2022-11-30 12:46:12" @now(unit) @now("year") "2022-01-01 00:00:00" @now("month") "2022-08-01 00:00:00" @now("week") "2022-08-09 00:00:00" @now("day") "2022-08-11 00:00:00" @now("hour") "2022-08-11 15:00:00" @now("minute") "2022-08-11 15:24:00" @now("second") "2022-08-11 15:24:02" @now(format) @now("yyyy-MM-dd HH:mm:ss SS") "2022-08-11 15:24:02 761" @now(unit,format) @now("day", "yyyy-MM-dd HH:mm:ss SS") "2022-08-11 00:00:00 000" 时间戳 @timestamp(format) @timestamp("s") "1662605353" @timestamp("ms") "1662605408838"
  • 背景介绍 随着微服务系统及分布式架构的发展,多模块或子系统的依赖为软件系统的开发与测试带来了很多挑战。比如在测试某个模块时,依赖的第三方服务不能返回想要的结果,或第三方服务不稳定时,该模块的测试进度则会受到影响。 Mock服务能很好解决这些问题,使用场景如下: 并行开发:在被依赖模块未开发完成时,使用Mock服务替代真实业务服务场景,可进行并行开发。 依赖服务不稳定:当依赖服务不稳定时,会导致自动化测试用例失败,使用Mock服务替代真实服务,可以保证自动化测试稳定执行,提升流水线的健壮性。 构造异常场景:测试时需要构造某些异常数据或延迟响应等异常场景,真实服务通常无法满足需求,使用Mock服务替代可以快速构造异常场景,提升测试覆盖率。 前后端分离开发:前端开发往往依赖于后端数据接口,在后端接口就绪之前,前端往往很难推进,前端可以通过Mock功能制造场景数据接口来进行开发与调试。 父主题: API Mock
  • 执行流程 CodeArts API提供基于JavaScript的脚本引入,通过脚本可以实现在快捷调试或接口请求时添加动态行为。脚本执行流程如图: CodeArts API兼容Postman脚本语法,可以将Postman脚本迁移到CodeArts API中使用。 CodeArts API脚本能力仅限于快捷调试、接口调试、接口调试用例。 接口的前置脚本与后置脚本支持配置多个,并按照配置顺序执行。 CodeArts API支持脚本输入提示。 父主题: 脚本能力
  • 对于发送请求的处理 pm.sendRequest pm.sendRequest:Function用于脚本异步发送HTTP/HTTPS的请求。 更多参数信息请查阅Collection SDK 文档 。 在前置脚本和后置脚本都可以使用。 更多参考: Request JSON 结构 Response 结构 // 使用字符串URL示例 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } else { pm.variables.set("variable_name", "new_value"); } }); // 完整请求示例 const echoPostRequest = { url: "https://postman-echo.com/post", method: "POST", header: { header_name1: "value1", header_name2: "value2", }, // body 为 x-www-form-urlencoded 格式 body: { mode: "urlencoded", // 此处为 urlencoded // 此处为 urlencoded urlencoded: [ { key: "account", value: "codeartsapi" }, { key: "password", value: "123456" }, ], }, /* // body 为 form-data 格式 body: { mode: 'formdata', // 此处为 formdata // 此处为 formdata formdata: [ { key: 'account', value: 'codeartsapi' }, { key: 'password', value: '123456' } ] } // body 为 json 格式 header: { "Content-Type": "application/json", // 提醒:header中需要添加Content-Type }, body: { mode: 'raw', raw: JSON.stringify({ account: 'codeartsapi', password:'123456' }) } // body 为 raw 或 json 格式 body: { mode: 'raw', raw: 'body内容' } */ }; pm.sendRequest(echoPostRequest, function(err, resq) { console.log(err ? err : resq.json()); }); // 对返回结果进行断言 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } pm.test("response should be OK to process", function() { pm.expect(err).to.equal(null); pm.expect(resq).to.have.property("code", 200); pm.expect(resq).to.have.property("status", "OK"); }); });
  • pm pm:Object pm对象,含有接口运行关联信息。可利用它获取或设置环境变量和全局变量,且访问请求信息和返回结果信息。 pm:info:Object pm.info对象,含有接口运行关联信息。 pm.info.eventName:String:获取当前执行的脚本类型:前置脚本(prerequest),后置脚本(test)。 pm.info.iterationCount:Number:返回执行循环的总次数,仅集合测试有效。 pm.info.iteration:Number:获取当前执行循环(iteration)次序,仅集合测试有效。 pm.info.requestId:String:获取运行中接口用例的唯一ID。 pm.info.requestName:String:获取运行中接口用例名称。
  • 对于响应的处理 pm.response 在后置脚本中pm.response接口请求完成后返回响应信息,Response SDK 参考。 response包含了以下结构: pm.response.code:Number:获取响应码。 pm.response.status:String:获取响应状态。 pm.response.headers:HeaderList:获取响应头。 pm.response.responseSize:Number:获取响应大小。 pm.response.text():Function:以文本形式输出响应体。 pm.response.json():Function:以json形式输出响应体。 pm.response.setBody(''):设置响应体。 pm.response.headers.get:从响应头中获取指定参数的值,Response SDK 参考。 后置脚本中使用“pm.response.headers.get”命令可以获取响应头中指定参数的值。例如想要获取响应Header中date参数的值,那么可以在后置操作中输入如下自定义脚本: var test = pm.response.headers.get("date"); console.log(test);
  • 对于请求的处理 pm.request pm.request对象可以在脚本中对请求数据进行访问,Request SDK 参考。在前置脚本中表示即将运行的请求,在后置脚本中,表示已经运行的请求。 pm.request包含了以下结构: pm.request.url:Url:获取当前请求的URL。 pm.request.getBaseUrl():获取运行中环境选择的前置URL。 pm.request.method:String:获取当前请求的方法,如GET、POST等。 pm.request.headers:HeaderList:获取当前请求的headers列表。 pm.request.body:RequestBody:获取当前请求的body体。 pm.request.headers.add({ key: headerName:String, value: headerValue:String}):function:为当前请求添加指定键和值的header。 pm.request.headers.remove(headerName:String):function:删除当前请求里指定键的header。 pm.request.headers.get(headerName:String):function:获取请求里指定名称的header。 pm.request.headers.upsert({ key: headerName:String, value: headerValue:String}):function:插入指定键和值的header(如果header不存在则新增,如果header已存在则修改)。 pm.request.auth:获取请求的身份验证信息。
共100000条