我正在尝试进行一个模拟,其中Gatling中的每个虚拟用户都有一个唯一的登录/身份验证,并执行我记录和编码的一系列操作。但我正在努力正确设置授权。这是我的代码
public class SampleSimulation extends Simulation {
static Random rand = new Random();
HttpProtocolBuilder httpProtocol = http
.baseUrl("http://base-url.com") // Here is the root for all relative URLs
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // Here are the common headers
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.5")
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0");
// .basicAuth("username", "password");
static ActionBuilder addAuthentication(String name){
String username = "username"; // generate random username from valid ones
String pw = "password"; // generate random password that's valid for username
http.basicAuth(username, pw);
return http(name).get("/rest/activity/me");
}
static ActionBuilder getMe(String name){
return http(name)
.get("/rest/activity/me");
}
...
ScenarioBuilder scn = scenario("name")
.feed(Utils.getItemIdFeeder())
.exec(addAuthentication("n"))
.exec(getMe("n")).pause(Duration.ofMillis(300),Duration.ofMillis(750))
.exec(postUpdateLocale("n")).pause(Duration.ofMillis(0),Duration.ofMillis(4))
.exec(getBalance("n")).pause(Duration.ofMillis(500), Duration.ofMillis(2000))
.exec(getMe("n")).pause(Duration.ofMillis(0), Duration.ofMillis(15))
.exec(getInventory("n")).pause(Duration.ofMillis(100), Duration.ofMillis(250))
);
{
setUp(scn.injectOpen(nothingFor(4), // 1
atOnceUsers(10), // 2
rampUsers(10).during(5)) //, // 3
.protocols(httpProtocol));
}
}
因此,当我在静态声明中提供用户名和密码时(我已经注释掉了.basicAuth行),它就可以工作了。然而,就服务器而言,gatling创建的每个虚拟用户都是相同的用户。如果我运行我在这里添加的代码,我的所有请求都会得到http 401s,这是未经授权的。
谁能告诉我我做错了什么,在Gatling中处理凭据的正确方法是什么?请注意,我已经在为项目使用提要器。
谢谢你!
http.basicAuth(username, pw);
return http(name).get("/rest/activity/me");
因为HttpProtocolBuilder是不可变的,所以这绝对没有任何作用。
我建议你花点时间阅读文件和加特林学院,你最终会节省很多时间。
如果查看basicAuth的文档,您会发现它也可以接受Gatling EL表达式,因此您可以执行以下操作:
我在调试身份验证问题时遇到了这个代码片段: 我在调试和摆弄用户凭证时注意到,如果第一个身份验证提供者(即< code > userdailsservice )无法对我的用户进行身份验证,那么就会远程调用我的LDAP服务器来尝试对我的用户进行身份验证。但是,如果第一个身份验证提供者成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供者。 我的问题是,列出这些身份验证提供者的工作方式是否使得如
在上面的代码示例中,试图为每个请求生成唯一的txn-id。但是,观察到它正在重复使用相同的数字导致重复。我还尝试使用以下方法根据当前时间生成,当在1秒内触发超过1个请求时,它仍然会导致重复。 任何替代解决方案来为每个请求生成唯一ID,而不管并发情况如何? 提前感谢。
我需要加载测试一个需要OAuth2的API。0通过Gatling获得的代币(我完全是新手!)但希望每个虚拟用户使用相同的令牌。我正在检索令牌ok(我想)并将其放入一个名为“access”的变量中,但在测试本身开始时,我一直得到“没有定义名为“access”的属性”。 我的令牌检索如下所示(以及下面使用的httpConf): 然后,我尝试将负载测试设置为(注意:我最初确实放了“Map”,而不是可变变
我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。 这是我的安全会议。xml:
我在应用程序中配置了两个身份验证提供程序,一个使用LDAP,另一个查看数据库: Spring首先尝试使用LDAP,如果它在那里找不到用户,它会尝试我的自定义提供程序。 我想做的是强制Spring在所有可用的提供者中对用户进行身份验证。在这种情况下,它只会尝试我的自定义提供程序,前提是它可以先在LDAP服务器中执行登录。如果自定义提供程序中的身份验证失败,则整个身份验证将失败。 有可能通过Sprin
问题内容: 我的Web应用程序有多个身份验证管理器(一个用于API,一个用于WEB访问)。该api应该仅具有基本的身份验证服务- 通过spring安全标记进行配置,如下所示: 我无法内联身份验证提供程序,因为我希望它可以被子bean配置覆盖。 我的问题是我无法在security:authentication-provider元素上定义别名/ id以在身份验证管理器中引用它。有一个简单的解决方法吗?