【问题标题】:JMeter Script Path missing "\" so not working?JMeter 脚本路径缺少“\”所以不起作用?
【发布时间】:2024-01-21 12:26:01
【问题描述】:

我正在尝试使用此处发布的 beanshell 脚本来获取在我的 jmeter 测试中运行的 jmx 的路径 - Access to JMeter script path

它正在工作,如果我在由 beanshell 设置时记录路径的输出或使用调试器查看变量,我会得到按预期显示的脚本路径 -

c:\my\path\to\script

但是当我尝试将该变量传递给 sendKeys 时,斜杠“\”被删除了,所以 -

c:mypathtoscript

这不起作用,所以我无法附加/上传我的文件..

当然我错过了一些愚蠢的东西

谢谢

【问题讨论】:

  • 尝试转义反斜杠。
  • 嗨凯文,我该怎么做?路径是由链接中发布的 beanshell 脚本生成的...
  • 我不知道您将如何转义生成的路径,但如果您可以在将其传递给您的 sendKeys 变量之前对其进行修改,请使用双反斜杠来转义反斜杠或正斜杠。跨度>
  • 请分享 BeanShell 代码以及如何传递 JMeter 绝对路径的值
  • 我有一个名为“homepath”的UDV,其值为“${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${ __BeanShell(File.separator,)}" 并且我正在使用 ${homepath} 调用该变量,调试时使用单个反斜杠显示它,并且当 webdriver 运行时这些将被删除..

标签: javascript jmeter beanshell


【解决方案1】:

需要用户 vars.put 将 JMeter UDV 值放入 Javascript 变量中,然后使用 javascript concatenate 将它们链接在一起。

【讨论】:

    【解决方案2】:

    至少有两种方法可以在不使用 Beanshell 的情况下完成此任务:

    1. 从 WebDriver Sampler 调用 FileServer 方法:

      someElement.sendKeys(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir())
      
    2. JMeterVariables获取值

      var vars = org.apache.jmeter.threads.JMeterContextService.getContext().getVariables()
      someElement.sendKeys(vars.get('homepath'))
      

    示例完整代码:

    WDS.sampleResult.sampleStart()
    WDS.browser.get('http://ya.ru')
    var searchInput = WDS.browser.findElement(org.openqa.selenium.By.id('text'))
    
    //directly access function from JavaScript
    searchInput.sendKeys(org.apache.jmeter.services.FileServer.getFileServer().getBaseDir())
    
    //alternative way - getting the value from JMeter Variables
    var vars = org.apache.jmeter.threads.JMeterContextService.getContext().getVariables()
    searchInput.sendKeys(vars.get('homepath'))
    
    WDS.sampleResult.sampleEnd()
    

    关于从 WebDriver Sampler 访问 JMeter API 类的综合信息以及更多提示和技巧:The WebDriver Sampler: Your Top 10 Questions Answered

    【讨论】:

    • 你做了两次同样的事情:你操作文件。但最初的问题是询问如何操作字符串,所以不要松开反斜杠。