在编写Webapi测试用例的时候都是定义固定的测试数据,但这样的测试只能针对单一数据。为了更好的模拟实际情况,往往需要进行动态数据测试;通过动态数据测试可以更好的测出服务在不同数据情况下的处理能力。
WebBenchmark支持动态数据函数,通过动态数据函数可以让测试用例在每次测试所提交的数据都可以动态产生,从而达到更符合现实应用的压力测试。
数据函数
进入WebBenchmark后可以通过配置的变量配置里查看软件默认提供的值和函数
值以@开头的是数据函数,软件提供了数据函数有
date
根据当前日志返回一个日期格式
number
返回一个随机数值
guid
创建一个guid值
nextlist
从一个字符列表中随机返回一个字符项
软件提供的函数不多,但基于这几个函数即可方便地完成动态数据构建并进行测试。
订单查询
接下来针对一个订单查询功能进行一个动态数据测试。
public object Orders(EFCoreDB<NorthwindContext> db, int index, int product, int employee, string customer)
{Console.WriteLine($"jwt_info:{jwt_user}/{jwt_role}");SQL sql = @"select orders.*,(employees.FirstName || ' ' || employees.LastName) Employee,customers.CompanyName Customer from orders inner join employeeson orders.EmployeeID = employees.EmployeeID innerjoin customerson orders.CustomerID = customers.CustomerID where 1=1";if (employee > 0)sql.And().Where<Employee>(e => e.EmployeeID == employee);if (!string.IsNullOrEmpty(customer))sql.And().Where<Customer>(c => c.CustomerID == customer);if (product > 0){sql += " and orders.OrderID in(select orderid from 'Order Details' where ProductID=@p1)";sql += ("@p1", product);}DBRegionData<ExpandoObject> result = new DBRegionData<ExpandoObject>(index, 10);result.Execute(db.DBContext, sql);foreach (dynamic item in result.Items){sql = @"select [Order Details].*, Products.ProductName from [Order Details] inner join Productson [Order Details].ProductID= Products.ProductID Where [Order Details].OrderID=" + item.OrderID;item.Details = sql.List<ExpandoObject>(db.DBContext);}return result;
}
以上是一个订单查询webapi接口,提供的参数有查询的页数,客户,和雇员等。
雇员和客户定义
为了可以动态构建这两个查询项,需要针对这两个数据定义一个列表变量。
针对这两个参数构建对应的列表变量,后面就可以通过使用nextstr函数对这两个列表随机获取数据用于测试。
构建测试用例
以上先定义了一个随机在1-10的index参数,可以多次测试看对应的结果
接下来可以加入客户端查询参数
加入客户参数后的测试结果
接下来以同样的方式添加雇员参数
压力测试
测试用例定义完成后就可以对它进行压力测试,针对该用例定义一个性能测试用例
以上是针对sqlite上订单查询的压力测试结果。
软件安装使用
使用WebBenchmark对webapi进行管理和性能测试
(注意:以上功能在免费版本并不提供)
【BeetleX通讯框架代码详解】
【WebApi示例扩展】
BeetleX
开源跨平台通讯框架(支持TLS)
轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用
https://beetlex.io
如果你想了解某方面的知识或文章可以把想法发送到
henryfan@msn.com|admin@beetlex.io