【问题标题】:SoapUI (pro) - automated retrieving access tokenSoapUI (pro) - 自动检索访问令牌
【发布时间】:2015-03-30 14:10:58
【问题描述】:

首先,我必须写一些“sosage around”来清楚地解释我需要弄清楚的内容。所以,请耐心等待。

在我的 SoapUI 项目中的 TestCase 中,我有一个包含“发送获取请求”步骤和“属性”步骤的测试步骤。在测试步骤“发送获取请求”中,我正在请求访问令牌

如果我想自动检索此访问令牌,可以通过 Javascript(我已经拥有)来完成。

var userIdElement = document.querySelector("#idp *[name=userid]");
userIdElement.value = "123123"

var password = document.querySelector("#idp *[name=userpwd_page]");
password.value = "aa123456";

var button = document.querySelector("button[type=submit]")
button.click();

那么,我的问题是什么? 我需要弄清楚:

  • 如何从我的测试场景中的属性中加载一个变量 JS 变量到:

    userIdElement.value = "123123"
    

    使用类似的语法很常见

    def var_sql = context.expand("${#Properties#ID_SQL}")
    

    但这只能在 Groovy 脚本中使用。 那么,这可以在 Javascript 中以某种方式完成吗?

  • 第二件事是,如果我想检索 AT,我必须单击“获取令牌”,然后单击“获取访问令牌”。但是当我需要自动执行此操作时,这是一个相当大的问题。那么,您知道如何自动执行此操作吗?

非常感谢你们!

【问题讨论】:

  • 专业版没有免费支持吗?
  • 你是如何发送 GET 请求的? http请求步骤?那么您可以使用与您提到的相同的语法,但您可以使用 ${#TestCase#SOME_PROPERTY}
  • @tim_yates 好吧,我到处寻找信息... :)
  • @Rao 嗨,这里的问题是语法 ${#TestCase#Some_property} 在 Javascript 中不起作用。像这样调用 varialbe 仅在 Groovy 中可行,而在 Javascript 中则不行。我收到错误:The following script is invalid: var userIdElement = document.querySelector("#idp *[name=userid]"); userIdElement.value = ${#TestCase#SOME_PROPERTY} //"9423752534" var password = document.querySelector("#idp *[name=userpwd_page]"); password.value = "aa123456"; var button = document.querySelector("button[type=submit]") button.click(); Error: missing ; before statement (scriptToValidate#2

标签: javascript groovy soapui


【解决方案1】:

您可以在使用 SOAPUI 中的 javascript 的脚本中使用 context.expand

例如,如果您在 TestCase 中添加一个名为 SOME_PROPERTY 的属性,那么您可以使用 javascript 检索它,如下所示:

var a = context.expand('${#TestCase#SOME_PROPERTY}');
log.info(a);

正如您所看到的,也可以像在 groovy 中一样使用log 对象,因此我添加了log.info(a);,因此您可以在script log 选项卡中看到结果。见下图:

所以你的脚本不是context.expand 的问题是你在一些行的末尾缺少;(正如你在评论中所说的rinho 抛出的错误,它是js 引擎是:Error: missing ; before statement)。添加缺少的; 将解决您的问题。所以使用类似的东西:

var userIdElement = document.querySelector("#idp *[name=userid]");
userIdElement.value = context.expand('${#TestCase#userIdProperty}');

var password = document.querySelector("#idp *[name=userpwd_page]");
password.value = context.expand('${#TestCase#passwordProperty}');

var button = document.querySelector("button[type=submit]");
button.click();

代替:

var userIdElement = document.querySelector("#idp *[name=userid]");
userIdElement.value = "123123"

var password = document.querySelector("#idp *[name=userpwd_page]");
password.value = "aa123456";

var button = document.querySelector("button[type=submit]")
button.click();

希望这会有所帮助,

【讨论】:

  • 嗯,“;”不是问题。我尝试了你的建议,我想感谢它,但你输入代码 sn-p 的地方不是我需要使用它的地方。我需要在“获取令牌”中使用它:screen 1screen 2 正如您在第二个屏幕中看到的那样,甚至没有任何“上下文菜单”,因为它通常在soapui中......你知道吗?谢谢!
  • @MiroslavMajer 哎哟......好吧,我现在明白你的意思了:)......我不能尝试这个,因为这个选项只适用于专业版。对不起。
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2021-09-05
  • 2015-09-08
  • 2020-10-12
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多