关于“自我”验证表达式,我有两个问题:
问题1
在我的特写中我有
* def isStatus = function(s) { return s ==='SUCCESS' || s ==='ERROR' }
And match response[0] contains { status: '#? isStatus(_)' }
我希望对每个响应项都这样做,例如(*而不是0):
但它不起作用?有什么不对劲吗
没有js函数,我无法做到这一点,如本例所示:
* def date = { month
我通过在场景中调用功能文件来重用它。上下文是,我想要在common.feature文件中测试我的所有端点的一些公共特性。然后在特定端点的功能文件(endpoint.feature)中,我首先调用场景中的common.feature文件,然后调用特定于该端点的其他场景
我的common.feature文件如下所示:
Feature: ...
Scenario: scenario 1
Scenario: scenario 2
Feature: ...
Scenario: test
我有一个很奇怪的问题
我想将两个列表附加到一个列表中,但似乎空手道不支持此函数,所以我编写了一个JS函数
function(lists){
var arr = []
for each (var list in lists){
for each (var item in list){
arr.push(item);
}
}
return arr;
}
我编写这个功能文件进行测试:
Feature:
Sce
您好,我正在尝试使用karate.set向json添加新的键和值,但无法将异常作为无效的varibale名称,下面是我的代码:
Backgroung:
* def myjson = {name: 'test', start_date: '27-04-2017'}
* def localDateTime = Java.type("java.time.LocalDateTime").now()
Scenario:
* string endDate = 'myjson.end_date'
* de
这是我的密码
*def aJson=[{foo1:2},{bar1:2},{foo2:null},{bar2:a}]
*def bJson=[{foo1:4},{bar1:2},{foo2:null},{bar2:b}];
*匹配aJson==bJson
这是版本为0.9.1的代码的结果,该版本为此提供了错误修复。
据我所知,不可能同时获得foo1和bar2错误的信息。这是不受支持的。这对于测试web服务的团队来说从来都不是问题,因为您只想检测增量。如果您觉得这是一个问题,请提供代码或使用其他
我试图在javascript函数中调用一个功能文件,如下所示
sample.js:
var authToken= function(urlparam1){
var config = {urlparam: urlparam1}
var result = karate.callSingle('classpath:test1.feature',config);
karate.log('accesstoken in js file:', result.accessToke
在VSCode中调试时,我附加了一个断点的映像,您可以看到,当我向varconfig对象添加data节点时,karate.log(…)console输出显示我没有在config对象中放置data配置,但是调试器显示data变量已经设置,并且在堆栈的作用域中
我做错什么了吗?我希望print语句显示config.data节点的值
这是我的调试器的屏幕截图(请参见图像上的两个红色箭头以及调试器堆栈上的数据值):JSON对象中的Yes属性是可变的karate config.js首先运行,因此日志显示为
我正在尝试设置一个框架来运行Graphql调用,并创建和运行E2E环境
到目前为止,我已经完成了以下设置,但我似乎无法使标题部分正常工作。我已经成功地为每个请求设置了身份验证,但当它为每个请求登录时,它并没有真正按照预期工作
我想执行以下步骤:
运行登录测试(不同用户名有效/无效)
运行注销测试(确保令牌已删除)
然后使用正确的用户登录并提取“set cookie”头(全局用于所有未来请求)
我试图使用以下方法:
Karate-config.js
karate.callSingle('cla
我95%的自动化框架都是用空手道制作的,效果很好。很少有功能需要检查显示在应用程序日志(而不是Json响应)中的中间结果。我编写了一个shell脚本,在从Postman手动发送请求后,在Linux机器上验证应用程序日志。我使用eclipse中的JSCH库调用这个脚本
有没有什么方法可以让我直接从空手道发送请求,然后调用我的JSCH类进行验证,从而避免手动发送请求
谢谢,
Abhi看起来您不知道空手道具有出色的Java互操作性
请阅读:
作为第二个选项:您可以使用调用任何OS命令,它甚至将以字符串
如果条件为true,我想执行多个语句。我想知道在Intuit空手道框架中是否以及如何实现
在空手道文档中,我发现如下示例,如果满足下面列出的if条件,则所有示例都只有一条语句需要执行
if (env == 'dev') karate.configure("ssl", true)
if (responseStatus == 200) karate.call('delete-user.feature')
if (responseStatus == 404) karate.ab
我正在运行以下场景示例:
Scenario Outline: Basic test for user <userID>
When url 'xyz'
And path 'abc/efg'
And params id = <userID>
When method get
Then status 200
Example:
|userID|
|1|
|2|
|3|
|4|
场景大纲:用户基本测试
当url“xyz”时
和路径“abc/efg”
和参数id=
当方法得到
然后
所以我使用这里提供的readRow方法从DB读取值
这里的一列具有xml值
当我试图直接从一个xml节点获取值时,我得到一个错误
无法转换为映射:[类型:字符串,值:choice1Choice2]
*def DbUtils=Java.type('Java.DbUtils')
*def db=new DbUtils(dbConfig)
*def query=“从(NOLOCK)中选择*,其中id=”+id+“”
*def fetchRows=db.readRow(查询)
*打印“fetchRows
我正在使用为API测试实现的现有登录功能为功能文件中的UI测试设置cookie。类似于空手道文档中描述的“混合方法”以及本主题中的-
我的功能文件是:
Feature: UI one time login test
Background:
# I am using the existing login functionality. I perform a onetime login in karate-config and store the cookie in a config variab
我有这个:
Background:
* url 'http://localhost:15672/api/exchanges/%2F/my_exchange'
Scenario:
Given path 'publish'
这里的问题是url被解析为:
http://localhost:15672/api/exchanges///my_exchange/publish
而不是:
http://localhost:15672/api/exchanges/%2F/my_exchang
我正在研究将HTML报告组织到默认的target/surefire报告以外的目录中
我在文档中读到,Runner有一个现有的reportDir()方法。我可以将此方法用于JUnit5测试吗?如果没有,还有其他方法吗
我遇到了一个类似的问题,但我没有使用可执行的jar版本,因此接受的答案将不适用
任何帮助都将不胜感激。请开始尝试1.0 RC版本:-对RunnerAPI以及如何控制报表输出目录进行了更改
并且没有理由为基于JUnit的测试定制此选项,该选项只是为了方便开发人员:
还要注意的是,在1.
我的有效载荷如下所示:
{
"override_source": "DS",
"property_code": "0078099",
"stay_date": "2018-11-26T00:00:00.000000",
"sku_prices": [
],
"persistent_override": false
}
有一个数组dblist[“2”,“3”],它由1到4的数字组成。基于列表中的元素,我想将键值{“sku价格”:“1500”,“sku代码”:“2”}添加到
当空手道0.6.1与黄瓜一起使用时。它正在代码中指定的路径中生成测试结果输出到cucumber.json文件
然后使用MasterThink生成Cumber报告
@RunWith(Karate.class)
@CucumberOptions(monochrome = true, features = "SampleFeature.feature",
plugin = {"pretty", "html:target/site/cucumber-pretty",
"json:target/cu
我编写了一个小场景,需要将json键值检查为任意整数。这是我在空手道DSL中的测试步骤:
When method get
* print response
Then match response contains { numberOfElements: '#regex [0-9]+' }
运行时,我得到一个错误:
路径:$.numberOfElements,实际值:8,预期值:“#regex[0-9]+”,原因:不是字符串✽.然后匹配响应包含{numberOfElements:'#regex[
当我将内容类型='application/x-www-form-urlencoded'作为头发送时,它被更改为内容类型:application/json;在空手道版本0.9.2中。
在空手道版本0.7.0中,它仅作为内容类型='application/x-www-form-urlencoded'发送
Given url "https://foo.bar.buzz"
And header Content-Type = 'application/x-www-form-urlencod
我的验证是验证orgId是否出现在响应中,并且orgId应该包含一些值
我得到的回应是
状态代码200,响应正文为空
现在我有下面的实现
Then match $.orgId == '#present'
Then match $.orgId == '#notnull'
在这种情况下,代码通过,理想情况下应该失败,因为响应主体为空,并且响应中不存在orgId。
我的问题是,为什么代码会通过#present和#notnull,即使响应主体是空的您肯定遗漏了什么。在一个全新的场景中尝试一下,看看它是
1) 您可以在“空手道选项”中运行所需的功能添加路径到功能:
@RunWith(空手道类)
@KarateOptions(features=“classpath:animals/cat/required.feature”)
公共级CATSPSTRUNNER{
}
2) 您可以运行所需的功能或场景,并在“空手道选项”中向功能或场景添加标记:
@RunWith(空手道类)
@KarateOptions(tags=“@someTag”)
公共级CATSPSTRUNNER{
}
3) 您还可以将方法
我从api得到了以下响应
{
"error": {
"serverTime": 1564066755618,
"id": "VALIDATION_EXCEPTION",
"category": "system",
"message": "errors: [property: username; value: ; constraint: EMAIL_INLINE_ERROR_MESSAGE_1; property: usern
我需要引用示例映射中定义的全局名称。如何获得参考资料
当我试图喜欢上面的代码时,出现Javascript求值错误。是的,示例不支持JS求值和变量。使用表单并在其上循环调用第二个功能:
或者,您可以通过在后台初始化表来尝试使用动态场景大纲:
Feature: Test Type
Background:
* url host
* def name = 'test_name'
* def label = name
Scenario Outline: Test 2
我正在致力于自动化中国服务器上托管的API,当我发送请求时,它会抛出超时异常(org.apache.http.conn.HttpHostConnectException)
我的功能文件:
Background:
* url 'http://myurl'
* configure connectTimeout = 500000
Scenario: Get Client details
Given path '/clients'
And header Authorization =
我们能否在空手道赛后的场景/场景大纲中失败,因为空手道中没有软断言
我希望我的空手道代码运行完整的场景,最后它应该报告什么是失败和通过
解决方法:-1。我在afterScenario中调用了自己的Java类,尝试了空手道记录器,但它并没有在空手道报告中报告。
2.在afterScenario自己的Java类中尝试使用Assert语句,但在空手道报告中未显示失败状态
围绕1:-
**背景中的场景之后**
* configure afterScenario =
"""
function(){
var
我需要在运行空手道测试后进行清理,并为我创建的所有对象调用清理端点。
类似于:
for all objects i created:
invoke rest endpoint path/object.id
我跟着
还检查了
它们允许在请求中传递param,但不允许在路径param中传递param。我试着做:
def result = call read(clean-up.feature) ids
但是这失败了,因为clean.feature需要两个参数path和id
Give
我有一个非常大的响应数组,我想断言它,但不知道它的顺序。我有一个带有预期响应值的变量,所以我可以进行一个巨大的比较,但是我无法加载整个响应并同时将其与整个预期响应变量进行比较
* def obligationsQuery = Java.type("tests.account.sql.Obligations").getObligations(division, account)
* def getObligations = db.readRows(obligationsQuery)
我当时正试图用UI应用程序的空手道测试框架进行POC。
我们使用的是Chrome浏览器。我们需要以匿名模式测试应用程序(或者每次都需要清除缓存和历史记录才能运行测试)
在匿名模式下运行应用程序时,我们应该使用哪些驱动程序类型选项。您不必担心,因为空手道将在新的--用户数据目录中启动每个Chrome实例。如果你真的想要,你可以定制它(参考文档)
而作为命令行选项传递的--incognito将执行您想要的操作。在驱动程序设置中查找addOptions。您无需担心,因为空手道将在新的--用户数据目录中
我有一个请求,如果请求正在处理中或已通过,我将在响应参数中得到处理或提交。
我能够轮询并获取状态是否为“正在处理”或“已提交”,但在此之后,如果在轮询5次后仍无法获取预期状态,则我无法拒绝请求。
在某些重试没有提供预期响应后,我如何才能使请求失败?答案在您的问题中
我假设您正在使用js函数进行轮询,
如果是这样,您可以从中添加布尔值返回值,如果您的条件未满足返回值为假,或者如果条件满足返回值为真,则断言从要素文件返回的值
* def pollingFunc =
"""
function(x) {
很抱歉,这个问题似乎是重复的,但确实让我很困扰
我正在尝试从另一个要素文件调用一个要素文件以及变量值。而且根本不起作用
下面是我正在使用的结构
我的请求json具有变量名文件名:InputRequest.json
{
"transaction" : "123",
"transactionDateTime" : "#(sTransDateTime)"
}
我的功能文件1:ABC.Feature
@tag1
*
我有一个功能,它有62个不同的测试数据,在场景大纲+示例的帮助下,所有这些测试都在执行中
Examples:
|elements|
|1|
|2|
|3|
...
|62|
运行后,空手道报告的标题中只有功能名称。有没有办法,我们也可以将测试数据附加到标题中?在报告和日志中非常需要它,因为查找故障有点棘手,因为有许多服务正在并行运行
当前报告:
预期报告:
这太容易了,只是想出来了。它只需要在场景名称中添加参数名称
@debug
Scenario Outline: Get forec
我正在尝试打印以下内容:
* print response.requests[?(@.friendlyId == '#(ORID)')]
where ORID is:
* def temp2 = response.teams[?(@.name == '<Name>')].requestedResources[0].resourceRequestFriendlyId
* def ORID = temp2[0]
*打印响应.请求[?(@.friendlyId='#(ORID)]
我只使用最新的独立空手道jar在配置了JRE的docker容器上测试我的API,我没有任何Java代码
目前在我的一个功能中,我有这样一个:read('file.json'),
而且,当资源文件与功能文件位于同一目录时,它可以正常工作。我知道建议这样做
但如果我还想有一个包含所有资源文件的中心目录,以避免重复,
即使使用此命令,它也不起作用:
read('classpath:directory/file.json')
错误如下:
“[com.intuit.karate.exception.kar
在什么情况下,我想使用#ignore而不是#present,反之亦然?还是完全相同
我第一次读到这些文件时,我以为下面的内容会通过,但事实并非如此。编辑添加:这在空手道0.9.0中失败,但在0.8.0中通过
* def foo = {a: 1}
* match foo == {a: 1, b: "#ignore"}
这些确实通过了:
* def foo = {a: 1}
* match foo == {a: 1, b: "##ignore"}
* match foo == {a: 1, b:
我有一个场景,我将与其他产品进行集成测试。所以我有两个URL,每个URL都有单独的授权令牌。在karate-config.js中是否可能有两个BaseURL?如果有,我们如何在功能文件中访问它们
karate-config.js
if(env == 'pre-prod')
{
config.baseUrl='url1'
}
headers.js
function() {
var authheaders = {};
switch(baseUrl){
ca
我有一个.js文件中的标题,我正在使用
* configure headers = read('classpath:services/Headers/distheader.js')
问题1
如何在运行时使用场景数据编辑此文件中的一个标题?
我尝试设置*标题'xyz'='value',但它没有编辑它
问题2
如果我想删除其中一个标题,怎么可能
因此,90%的场景都是“快乐路径”,并且配置了标题
现在,您需要一些场景来增加(或减少)标题。一个选项是为这些场景硬编码标题,请注意,您可以执行*c
要测试空手道中的特定功能,请运行以下命令:
mvn测试-Dkarate.options=“classpath:myfeature.feature”
有没有一种方法可以运行定义到功能中的单个场景
谢谢,
Lorenzo是的,您可以通过标签:
还请注意,您可以按名称运行场景,例如,如果名称为“first”:
如果您使用IntelliJ,您可以右键单击并执行上述操作
编辑:空手道现在支持使用行号,例如一些。功能:42,因此它将只调用第42行的场景或大纲示例-这是专为IDE-s和开发人员模式设计的,使用
使用karate.callSingle()我能够创建一些跨不同功能使用的全局资源。我想在每次自动化运行结束时删除这些资源。是否有类似于karate.callSingle()的函数,以便我可以使用该函数调用功能文件(此功能删除所有全局资源),并且此功能文件将在每次自动化结束时执行。这在并行执行中也会很有帮助。通常,最好在开始时依赖钩子,因为钩子有可能在最后一次失败,或者测试套件没有完成
实现这一点很容易,只需在并行运行程序的测试运行结束时使用Java,与此处生成cucumber报告的方式非常类似:
当我试图访问一个安全端点时,即使在使用以下空手道方法禁用SSL之后,我也会遇到SSL握手异常
选项1)在功能文件中声明了以下内容
*配置ssl=true
选项2)在karate-config.js中声明了以下内容
configure('ssl',{trustAll:true});
(或)
karate.configure('ssl',true)
例外情况:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorEx
如果嵌入表达式中有^^,则print不能很好地与嵌入表达式配合使用。更换后如何打印实际值
* def x = [{x: 'x1'}, {x: 'x2'}]
* def y = {y: '#(^^x)'}
* print y
这会打印出来
{y: '#(^^x)'}
但我想打印的是
{y: [{x: 'x1'}, {x: 'x2'}]}
你看起来很困惑。^快捷方式是为在匹配语句中使用而设计的
正常地这样做,您将得到您所期望的:
* def y = { y: '#(x)' }
* print
我正在使用空手道来提供SOAP API服务。如何声明全局变量??正如您可以在下面的功能文件中看到的那样?打印响应后,我有变量名def ourSession=/Envelope/Body/LoginReturn我正在下一个场景中使用此变量(ourSession),但它失败了?但这不是全球性的。
那么如何将“ourSession”声明为全局变量??所以我可以用在其他场景中?
我们将非常感谢您的帮助。请看一下我下面的功能文件
Feature:
SOAP calls to the follow
我试图从响应中检索animalId值。数组是动态的,因此我尝试使用def animalIds=response.animals[*].animalId从数组中检索animalId值
答复:
{
"animals": [
{
"animalId": "1234565",
"animalName": "Tom"
},
{
"animalId": "1234567",
关于这张票我有个问题
两者的区别是什么
KeyId:secretKey,
及
KeyId:'#(secretKey)?
是否可以在消息中不向def分配out的情况下使用apiKey?喜欢
*打印“此项目中的密钥为#apiKey”
谢谢你你问了三个问题:
a) 请阅读:
b) 请阅读:
c) 请阅读:
例如:
* def val = 'bar'
# correct
* def temp = { foo: '#(val)' }
# wrong
* def temp = { foo: val }
请使用-返回字符串的JSON数组
现在你想做什么就做什么
另请参见:对不起,我不想在理解您的代码时伤脑筋。我把它留给其他人,除非你能简化它并解释你想要实现什么。我创建了一个功能文件,其中只包含js函数,我们的大部分代码都依赖于这些函数,但在升级空手道后,我遇到了上述错误。好的,看看我的答案。如果你想要一个更有用的答案,问一个更有用的问题
* def a =
"""
function(ths,tsa,hcia) {
karate.log(JSON.stringi
尝试选择正确的chrome选项组合,以在传递登录表单后禁用恼人的密码管理器弹出窗口
以下是我如何创建驱动程序:
功能:驱动程序初始化
背景:
*配置重试={计数:5,间隔:3000}
场景概要:使用
*def配置=
*set config.showDriverLog=true
*配置驱动程序=config
*司机室https://google.com'
*最大化()
*retry().waitUntil(“document.readyState==“complete”)
示例:
|配置|
|
有没有人尝试过在我可以参考的空手道框架中实现NTLM身份验证?当我尝试构建测试并通过头参数时,我遇到401授权问题
@BeforeClass
public static void before() {
System.setProperty("http.auth.ntlm.domain", "***");
System.setProperty("jcifs.smb.client.domain", "***");
System.setProperty("jcifs.smb.c
我正在尝试读取karate-config.js的属性文件。当我从本地提供绝对路径,但当我提供相对路径时,它工作。它不起作用。有办法吗?谢谢
var config=karate.read(“文件:/repo/tests/utils/al_dev.json”);--这不管用
var config=karate.read(“文件:~/repo/tests/utils/al_dev.json”);--这不管用
var config=karate.read(“文件:/Users/user1/IdeaPro
当url为空时,我想跳过空手道测试执行。
目前,在Jenkins执行过程中,如果未通过karate.env,我不会在karate-config.js中设置url/domainName。在这种情况下,由于url/主机名为空,我的空手道测试用例失败。
如果值未在karate.env系统属性中传递,我希望跳过所有的空手道测试执行。
请建议我如何实现上述目标。
谢谢这不受支持。您可以尝试钩子,但API将来可能会更改:我在“后台”中尝试了*eval if(karate.env=='NoUrl')karat
我正在尝试重用空手道脚本,并使用gatling执行负载测试。定义的场景是每秒加载50个用户,持续10秒。(加载测试500个用户)但是,gatling报告中每秒的请求数不超过20个。如果我做错了什么,请告诉我。
执行空手道脚本的ExampleTest.java代码
//package examples;
import com.intuit.karate.Results;
import com.intuit.karate.Runner;
import static org.junit.jupite
我是空手道dsl新手。我想从响应详细信息中获取相关id(当出现故障时)。我该怎么做呢?这里有两个问题。若要对故障执行操作,请参见《赛后》:
通过co-relationid,我假设您的意思是希望从响应中获取标题。请参阅以下文件:
如果你是空手道dsl新手,我建议你先做一些基本的测试。在我看来,以上两个都是高级主题。这里有两个问题。若要对故障执行操作,请参见《赛后》:
通过co-relationid,我假设您的意思是希望从响应中获取标题。请参阅以下文件:
如果你是空手道dsl新手,我建议你先做一些基
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 37 页