MeterSphere平台新增数据库查询校验使用手册

MeterSphere平台新增数据库查询校验使用手册


1.概述

MeterSphere做接口自动化测试是一件非常愉快的事情,提供的功能也是非常强大,下面我们就来说说怎么在MeterSphere平台中使用数据库做业务测试吧。

2.MeterSphere添加mysql数据源

  • 在场景中打开环境配置
    在这里插入图片描述
  • 在环境配置页面新增jdbc数据库
    在这里插入图片描述
  • 测试数据库是否可以连通
    在这里插入图片描述

3.发送SQL请求并进行业务断言

配置好数据库,我们就可以发起sql查询请求了。这里我们做个小Demo演示如何使用查询结果数据来断言我们业务测试结果的成功与失败。

3.1.发送sql查询请求

在这里插入图片描述

3.2.查询结果断言业务成功与否

我们判断查询数据库结果中t是否有一条ype字段为1的数据,如果存在则创建用户成功,如果没有则为失败。

  • 新增脚本类型断言
    在这里插入图片描述
  • 脚本完整代码
// ${type_1}表示取出type字段中第一条数据,取第几条数据角标写对应数字即可。
if(${type_1}==1){
    AssertionResult.setFailure(false);
    log.info("=====创建用户成功=====");
}else{
    AssertionResult.setFailure(true);
    log.info("=====创建用户失败=====");
}
  • 执行SQL查询结果

从断言结果中可以看到我们创建用户业务成功了。

在这里插入图片描述

3.3.引用数据库返回结果做断言遇到的问题以及解决方式
  • 1.描述下我们的需求

从查询结果中拿到type列的第一条数据,然后判断第一条数据type字段的值是否为1,如果为1就让断言成功。否则就让断言失败。

  • 2.编写查询SQL语句
SELECT * from user where phone='13700000099';
  • 3.提取type列数据作为断言变量

这里需要先说明下提取结果中存储结果和按列存储两种方式区别

在这里插入图片描述

  • 4.这里是我们执行查询返回的数据
    在这里插入图片描述
  • 5.断言脚本
    取出查询结果type为1的这条数据,然后判断是否等于1
// ${type_1}表示取出type字段中第一条数据,取第几条数据角标写对应数字即可。
if(${type_1}==1){
    AssertionResult.setFailure(false);
    log.info("=====创建用户成功=====");
}else{
    AssertionResult.setFailure(true);
    log.info("=====创建用户失败=====");
}

发现断言总是失败,然后查看日志发现${type_1}取值的时候报空指针异常。
在这里插入图片描述

这里为什么会报空指针异常错误那,我们查询返回的结果是没有问题的里面有一条数据,但是在取第一条数据type字段值的时候没有取到这个值报出了异常。通过多次尝试,原来问题的原因是对按列存储理解有错误导致上面的问题。


  • 6.按列存储正确使用方式

按列存储是根据查询返回结果字段从左到右的顺序才能取到我们需要指定字段里面的值,不是我们写个type名称就对应返回结果中type字段的数据。

示例如下:
在这里插入图片描述

上图中type列在返回结果中第三列,我们现在要取出type列的数据。按列存储填写方式如下,这样type取出的值才是查询返回结果中第三列type字段的值。

在这里插入图片描述


上面返回的查询结果列数非常多,这个时候我们要取最后一列数据,那么前面每列的名称都要写出来,那是多么麻烦的事情呀,这不符合用代码做事的风格。

  • 这个时候就可以用逗号作为占位符代替列名,只有需要提取列名称上的数据才写列名。

在这里插入图片描述

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好,针对您的问题,我们可以通过自定义校验器和依赖注入来实现在校验过程中进行数据库查询。以下是一个简单的示例: 1. 创建一个自定义校验器 ```csharp public class UniqueEmailValidator : AbstractValidator<string> { private readonly IDbConnection _dbConnection; public UniqueEmailValidator(IDbConnection dbConnection) { _dbConnection = dbConnection; RuleFor(email => email) .NotEmpty() .EmailAddress() .MustAsync(BeUniqueEmail) .WithMessage("该邮箱已被注册!"); } private async Task<bool> BeUniqueEmail(string email, CancellationToken cancellationToken) { var count = await _dbConnection.ExecuteScalarAsync<int>("SELECT COUNT(*) FROM Users WHERE Email = @Email", new { Email = email }); return count == 0; } } ``` 在上面的代码中,我们定义了一个 `UniqueEmailValidator` 类,它继承自 `AbstractValidator<string>`,用于验证邮件地址是否唯一。在构造函数中,我们注入了一个 `IDbConnection` 对象,这样可以在校验过程中使用它来进行数据库查询。 在 `BeUniqueEmail` 方法中,我们使用 `IDbConnection` 对象执行了一个查询语句,检查是否有相同的邮件地址。如果查询结果为 0,表示该邮件地址是唯一的,返回 `true`,否则返回 `false`。 2. 注册自定义校验器 ```csharp services.AddTransient<IValidator<string>, UniqueEmailValidator>(); ``` 在上面的代码中,我们使用 ASP.NET Core 的依赖注入机制,将 `UniqueEmailValidator` 类注册为 `IValidator<string>` 接口的实现,这样就可以在需要进行邮件地址校验的地方使用它了。 3. 在控制器中使用自定义校验器 ```csharp public async Task<IActionResult> Register(RegisterViewModel model) { if (!ModelState.IsValid) { return View(model); } // do something... return RedirectToAction(nameof(HomeController.Index), "Home"); } ``` 在上面的代码中,我们在控制器的 `Register` 方法中使用了自定义校验器。如果模型状态不合法,即校验失败,就返回模型本身,否则就执行其他的业务逻辑。 希望这个示例能够帮助到您。如果您还有其他问题,可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值