这是我前几天被问到的一个棘手的问题......我们正在开发一个非常复杂的电话(SIP)应用程序,其中包含混合的C++和PHP代码以及MySQL数据库和几个开源组件.
一位电信工程师要求我们估算应用程序的性能(尚未准备好).他说得很好,你知道每秒可以通过Linux内核传递多少数据包,而且你可能知道你的应用程序有多快,所以告诉我每秒会有多少通过你的东西的电话'.
对我来说似乎是无稽之谈,因为可能会发生一百万个场景(好吧,字面意思......)
但是......有没有办法在实际测试之前估算应用程序性能(知道它将运行的硬件,能够在其上运行标准基准测试等)?
performance benchmarking load-testing performance-estimation
我需要一些帮助才能使用JMeter.我想记录两个不同的场景,比如点击2个不同的按钮.如果我尝试为2个用户运行,则一个用户应该点击第一个按钮,另一个用户应该同时点击另一个按钮.
我知道这是基本问题.但我是这个新手.这就是为什么要问这里.我尝试过如下:
Thread Group
-Throughput Controller
--Login
--Clicking 1st button
-Throughput controller
--Login
--Clicking 2nd button
Run Code Online (Sandbox Code Playgroud)
当我使用CSV数据集配置与2个用户一起运行时,两个登录都使用相同的用户.
而且我还需要测试并发性.我不确定如何正确执行这个.任何人都可以帮助我吗?
在我的UnitTest中,我正在创建需要在将来的UnitTests中引用的数据.例如:
[TestMethod]
public void CreateOrder()
{
Order order = new Order();
int orderNumber = order.Create();
// return orderNumber;
}
[TestMethod]
public void ProcessOrder()
{
int orderNumber = (int)TestContext.Properties["OrderNumber"];
ProcessOrder(orderNumber);
}
Run Code Online (Sandbox Code Playgroud)
我需要保存'orderNumber',以便另一个UnitTest(可能在另一个代理上)可以使用这个生成的顺序.我已经决定我可以使用数据库了,但是我必须像删除项目中的队列那样操作它,并且不想去那条路.
是否有任何方法可以将orderNumber"返回"到LoadTest并将其作为Context参数传递给另一个UnitTest?
我有个问题.我在Jmeter中使用正则表达式提取器.我有两个正则表达式.
我可以从中获得价值.
Reference Name: as_fid_addtobasket
Regular Expression: <input type="hidden" name="as_fid" value="(.+?)" />
Template: $1$
Run Code Online (Sandbox Code Playgroud)
但我无法从这一点获得价值.
> Reference Name: DynamicTempOrderProductGuid
>
> Regular Expression: <input data-val="true" data-val-required="The
> TempOrderProductGuid field is required."
> id="OrderProducts_1__TempOrderProductGuid"
> name="OrderProducts[1].TempOrderProductGuid" type="hidden"
> value="(.+?)" />
>
> Template: $1$
> >
Run Code Online (Sandbox Code Playgroud)
这是我的结果.第二个没有得到价值.我错过了哪里?
POST数据:OrderProducts.index = 1&OrderProducts%5B1%5D.TempOrderProductGuid =%24%7BDynamicTempOrderProductGuid%7D&OrderProducts%5B1%5D.Count = 1&OrderProducts%5B1%5D.ReceiverModel.OrderReceiver.NameRec = Test + ama%C3%A7l%C4% B1D%C4%B1R.+ L%C3%BCtfen + dikkate +爱尔美%C4%B1n的%C4%B1z&OrderProducts%5B1%5D.ReceiverModel.OrderReceiver.PhoneRec = 05352233285&OrderProducts%5B1%5D.ReceiverModel.OrderReceiver.OSSendingReason =&OrderProducts%5B1 %5D.ReceiverModel.OrderReceiver.OSReceiverAddressType =&OrderProducts%5B1%5D.ReceiverModel.OrderReceiver.CompanyNameRec =&OrderProducts%5B1%5D.ReceiverModel.OrderReceiver.AddressLineRec =测试+ AMA%C3%A7l%C4%B1D%C4%B1R.+ L&C3%BCtfen + dikkate +爱尔美%C4%B1n的%C4%B1z&OrderProducts%5B1%5D.ProductCode = se213&OrderProducts%5B1%5D.TempOrderProductGuid =%24%7Btokentoken%7D&totalProducts = 1&as_fid = efWZ0i4RGLmC2nBWk%2FA1
我正在为具有AJAX调用的应用程序进行性能测试.我能够记录相同的请求但无法执行它们.有人可以帮我执行AJAX请求吗?
我需要为此使用任何额外的插件吗?如果是的话,它们是什么以及如何使用它们.
我写了一个简单的"教程"应用程序,它提供了一个名为"世界端点"的REST接口,您可以使用它来添加居民等.这样做的示例json请求可能如下所示:
{
"name": "Sergio Gonzales",
"age": "34",
"languages": [
{ "id": "119" },
{ "id": "14" }
],
"homeland": { "id": "121" },
"hometown": { "id": "155" }
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个加载测试来测试新居民的"创造".为了获得数据,我有三个不同的来源:
前两个将用于创建随机名称(当然,没有高度复杂的方法来创建有意义的数据).最后一个将用于选择国土,家乡和母语的ID.此外,我会随机选择额外的0 - 3种语言.
我认为我必须为此编写一个自己的进纸器但遗憾的是,自发布2.xx后,自定义进纸器的文档似乎已经消失
写入馈线的好方法是什么?我的第一个想法是直接加载csv数据,如下所示:
Source.fromInputStream(getClass.getResourceAsStream( "/名/ first_names.csv")).getLines.toSet
不确定使用csv("first_names.csv")是否会更好?
除了我也不知道,如何通过动态创建的数据替换json中的"语言"部分?是否有可能通过语言ID列表并自动转换为有效的json数组?
这是我的第一个工作版本.它有缺陷,但它基本上做我想要的.如果有人建议如何增强,请不要犹豫(我对scala很新).
package com.u6f6o.apps.hazelnate.load.scenario
import io.gatling.core.Predef._
import io.gatling.core.feeder.Record
import io.gatling.http.Predef._
import scala.concurrent.forkjoin.ThreadLocalRandom
class Insert100kInhabitants extends Simulation {
val random = ThreadLocalRandom.current
val footprints = csv("data/footprints.csv").records
val forenames = csv("data/forenames.csv").records
val surnames = csv("data/surnames.csv").records
val httpConf = http …Run Code Online (Sandbox Code Playgroud) 我使用JMeter设置了分布式负载测试环境。我使用的三个Linux机器(红帽)(IPS: ,xxx.xxx.xxx.121,xxx.xxx.xxx.122)xxx.xxx.xxx.123使用从我的Windows 8.1壳牌担保。
我已经满足执行分布式测试的先决条件:
Client(Master) Machine :xxx.xxx.xxx.123
Server(Slave) Machines: xxx.xxx.xxx.122,xxx.xxx.xxx.121
我做了以下工作:
1)在客户端(主)jmeter.properties文件中添加了以下内容:
remote_hosts= xxx.xxx.xxx.122,xxx.xxx.xxx.121
2)将以下内容添加到服务器(在每个从属计算机中)jmeter-server:
RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.123(客户端计算机IP)
3)然后使用此命令从这两个从属机器(xxx.xxx.xxx.122,xxx.xxx.xxx.121)启动jmeter-server
./jmeter-server
并获得以下输出。这意味着从属计算机已启动。
xxx.xxx.xxx.121的输出:
Created remote object: UnicastServerRef [liveRef: [endpoint:[xxx.xxx.xxx.123:41864](local),objID:[1707296d:154c281318b:-7fff, -8101068266055605468]]]
Run Code Online (Sandbox Code Playgroud)
xxx.xxx.xxx.122的输出:
Using local port: 4000
Created remote object: UnicastServerRef [liveRef: [endpoint:[xxx.xxx.xxx.123:4000](local),objID:[-2a2acf13:154c285ffa2:-7fff, 2939294752655639469]]]
Run Code Online (Sandbox Code Playgroud)
现在,我从客户端计算机(xxx.xxx.xxx.123)运行以下命令以启动远程测试。
./jmeter -n -t RemoteTest.jmx -r
它为我提供了以下输出:
Creating summariser <summary>
Created the tree …Run Code Online (Sandbox Code Playgroud) 我没有在蝗虫文档中找到有关要模拟的用户数量和孵化率的详细信息。
这两个参数之间有什么关系?
如果我有20个客户端,每个客户端将每秒向服务器发送1000个请求,我应该如何设置两个参数来测试服务器?
我正在尝试对需要登录的路由进行负载测试.
我以前使用https://artillery.io/docs/index.html登出的路线工作正常.对于登录路由,我尝试beforeRequest使用函数调用来设置请求标头和正文.
config:
target: "https://www.mywebsite.com/"
phases:
- duration: 60
arrivalRate: 50
processor: "test.js"
scenarios:
- flow:
- post:
url: "/login"
beforeRequest: "setReqBody"
而我的beforeRequest看起来像这样:
function setReqBody(requestParams, context, ee, next) {
requestParams.body = {'email': 'user@mail.com', 'password': 'password', '_csrf_token': window.csrfToken}
return next();
}
我收到一个window未定义的错误.
我环顾四周,看看还有什么我可以用来负载测试凤凰,但没有太多运气.有没有其他方法可以登录并测试这些路线?或者我可以使用其他依赖项/库来执行此操作?
我尝试从中的测试用例生成负载测试SoapUI。它有很多测试步骤,前10个步骤涵盖了登录过程。LoadTest在Groovy脚本中停止,该脚本应该从上一个测试步骤的输出中获取参数值。当直接执行时,它可以正常工作,但是当以a执行时,它会给出错误LoadTest:
groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.String# . Cannot resolve which method to invoke for [null] due to overlapping prototypes between: [class [B] [class [C] [class java.lang.String] groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.String# . Cannot resolve which method to invoke for [null] due to overlapping prototypes between: [class [B] [class [C] [class java.lang.String] error at line: 5
Run Code Online (Sandbox Code Playgroud)
Groovy 导致上述错误的脚本:
def tc1 = testRunner.testCase.getTestStepAt(context.currentStepIndex-1);
String rawData = new String(tc1.testRequest.response.rawResponseData);
Reger reger …Run Code Online (Sandbox Code Playgroud) load-testing ×10
jmeter ×4
ajax ×1
benchmarking ×1
c# ×1
elixir ×1
gatling ×1
groovy ×1
locust ×1
performance ×1
python ×1
regex ×1
soapui ×1
unit-testing ×1