JMeter如何使用两个密码验证登录

JMeter如何使用两个密码验证登录,jmeter,Jmeter,我正在创建一个jmeter scritp,我所看到的scnerio如下所示: 首先尝试使用密码1登录到应用程序,如果登录失败,则尝试使用密码2,如果使用密码2登录失败,则结果应为失败,否则为通过。 我创建了一个HTTP请求和密码1,密码2是用户定义的变量。有两个请求Req_1和Req_2,并使用“登录”操作配置它们,每个密码一个。使用“正则表达式提取器”或其他来解析对Req_1的响应,并使用“If Controller”查看其是否通过,只有在Req_1登录失败时才提交Req_2。有两个Req_1

我正在创建一个jmeter scritp,我所看到的scnerio如下所示: 首先尝试使用密码1登录到应用程序,如果登录失败,则尝试使用密码2,如果使用密码2登录失败,则结果应为失败,否则为通过。
我创建了一个HTTP请求和密码1,密码2是用户定义的变量。

有两个请求Req_1和Req_2,并使用“登录”操作配置它们,每个密码一个。使用“正则表达式提取器”或其他来解析对Req_1的响应,并使用“If Controller”查看其是否通过,只有在Req_1登录失败时才提交Req_2。

有两个Req_1和Req_2请求,并使用每个密码的“登录”操作一对它们进行配置。使用“正则表达式提取器”或其他来解析对Req_1的响应,并使用“If Controller”查看其是否通过,只有在Req_1登录失败时才提交Req_2。

将BeanShell Sampler添加到测试计划中,并添加以下代码(给定网站的工作代码):

将上述脚本添加到BeanShell采样器中的“脚本”文本区域

图像参考:

注意:根据您的要求替换URL、用户名、密码和错误消息。如果重要,请添加任何标题。

如果要使用HTTP采样器,请按照@SaiMatam建议的流程进行操作

  • 添加如果控制器,比较是否收到错误消息(在条件字段中写入条件)
  • 将同一个采样器(仅更改密码)放在If控制器内
    。仅当满足条件时,才会执行此采样器
  • 为If控制器中的采样器添加响应断言<代码>在“测试模式”字段中添加错误消息<代码>在“模式匹配规则”中选择“不”复选框。这将确保,如果收到错误消息,JMeter会将第二个请求标记为FAIL(我们正在检查响应是否不应包含给定的字符串/模式),否则会将其标记为PASS
  • 参考资料:


  • 将BeanShell Sampler添加到测试计划中,并添加以下代码(给定网站的工作代码):

    将上述脚本添加到BeanShell采样器中的“脚本”文本区域

    图像参考:

    注意:根据您的要求替换URL、用户名、密码和错误消息。如果重要,请添加任何标题。

    如果要使用HTTP采样器,请按照@SaiMatam建议的流程进行操作

  • 添加如果控制器,比较是否收到错误消息(在条件字段中写入条件)
  • 将同一个采样器(仅更改密码)放在If控制器内
    。仅当满足条件时,才会执行此采样器
  • 为If控制器中的采样器添加响应断言<代码>在“测试模式”字段中添加错误消息<代码>在“模式匹配规则”中选择“不”复选框。这将确保,如果收到错误消息,JMeter会将第二个请求标记为FAIL(我们正在检查响应是否不应包含给定的字符串/模式),否则会将其标记为PASS
  • 参考资料:


  • 当您提交错误的密码时,服务器是否返回403错误代码?还是在HTML正文中包含错误消息的200个成功代码?您的设计取决于它。@Naveen当我们提交错误的密码时,它返回200个成功代码,正文中有一条错误消息。我使用regEx提取器获取错误消息并将其存储在引用中。当您提交错误密码时,服务器是否返回403错误代码?还是在HTML正文中包含错误消息的200个成功代码?您的设计取决于它。@Naveen当我们提交错误的密码时,它返回200个成功代码,正文中有一条错误消息。我已经使用regEx提取器获取错误消息,并将其存储在引用中。我也在这样做。我在Req_1中使用了正则表达式提取器,并将通过或失败状态存储在名为“StatusCode”的引用变量中。然后使用if控制器查看其是否通过,然后仅在Req_1失败时提交Req_2。这是沃克林很好,我也在做同样的事。我在Req_1中使用了正则表达式提取器,并将通过或失败状态存储在名为“StatusCode”的引用变量中。然后使用if控制器查看其是否通过,然后仅在Req_1失败时提交Req_2。“这是沃克林,很好。”赛义德也这么做。我在Req_1中使用了正则表达式提取器,并将通过或失败状态存储在名为“StatusCode”的引用变量中。然后使用if控制器查看Req_1是否通过,然后仅在Req_1失败时提交Req_2。这是wokring很好,但我想要的是在结果树listner视图中,应该只有一个登录请求,要么通过,要么失败。如果两个密码中的任何一个都有效,则应该是pass。我不太熟悉Beanshell和JSR223后处理器,我想知道是否可以使用它们。我了解核心java。您可以尝试使用BeanShell Sampler并编写java代码,使用HTTPClient库发送HTTP Post请求。完成后,我将发布答案。使用BeanShell采样器生成GET请求的参考信息在这里。我已经尝试过了,但是我无法创建一个HTTP post请求,我们可以尝试使用两个不同的密码登录到一个应用程序。我将继续尝试并等待您的回答:)首先,为登录和发送构建一个HTTP Post请求,然后,您可以通过更改密码来重新发送请求。@Sai也可以这样做。我在Req_1中使用了正则表达式提取器,并将通过或失败状态存储在名为“StatusCode”的引用变量中。然后使用if控制器查看Req_1是否通过,然后仅在Req_1失败时提交Req_2。这是wokring很好,但我想要的是查看结果树列表,那里有shou
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import java.util.List;
    import java.util.ArrayList;
    
    
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://httpbin.org/post");
    List nvps = new ArrayList();
    nvps.add(new BasicNameValuePair("username", "vip"));
    nvps.add(new BasicNameValuePair("password", "secret"));
    httpPost.setEntity(new UrlEncodedFormEntity(nvps));
    HttpResponse response = httpclient.execute(httpPost);
    String responseString = EntityUtils.toString(response.getEntity());
    String responseCode = String.valueOf(response.getStatusLine().getStatusCode());
    
    String errorMessage = "secret";
    
    if(responseString.contains(errorMessage)){
        log.info("first time failed");
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("http://httpbin.org/post");
        List nvps = new ArrayList();
        nvps.add(new BasicNameValuePair("username", "vip"));
        nvps.add(new BasicNameValuePair("password", "secret"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps));
        HttpResponse response = httpclient.execute(httpPost);
        String responseString = EntityUtils.toString(response.getEntity());
        String responseCode = String.valueOf(response.getStatusLine().getStatusCode());
        if(responseString.contains(errorMessage)){
            log.info("second time failed");
            IsSuccess = false;
            ResponseCode = "403";
            ResponseMessage = "Login failed with both the passwords";   
        }
    }
    return responseString;