前言

上一篇《.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现》讲解了API的设计与实现,本篇主要讲解编写接口的SDK编写还有API的测试。

或许有些人会认为,SDK的编写可以不需要,既然已经用了RESTful web服务与Swagger提供的接口描述,只要选择合适的接口调用框架,找到对应Swagger文档按需调用即可。

这个我赞同,特别在微服务架构下使用了API网关与服务发现。因此本篇也是借用编写SDK来模拟在客户端使用接口框架调用,并增加负载测试的讲解,供需要的朋友们分享。

项目源码地址:https://github.com/SkyChenSky/Sikiro.SMS.git

SDK

Software Development Kit的缩写,翻译中文为软件开发工具包,百度定义为软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。而我们这里的SDK主要是以工具库的形式提供给部门内部使用API。

设计要点

  • 尽量少的依赖

  • 多形式方法重载

  • 高可读性

从上三点得出,高可读的方法注释,方便使用的多重载(单条、多条、异步、同步),如涉及到枚举,不要依赖原有项目的其他库,应拷贝过来完整提供。

组件选择

  • RestSharp

  • .Net Standard

RestSharp

为了良好的调用RESTful API,我选择RestSharp这个RESTful接口调用框架。

源码地址:https://github.com/restsharp/RestSharp

优点

请求调用与响应结果的直观化:

步骤:

  • 传入资源

  • 定义动作

  • 设置表述类型

  • 传入实体参数

注意点

1.默认序列化类型为XML,应手动设置为JSON

RequestFormat = DataFormat.Json 

2.反序列化有缺陷,对于实体内的类类型属性(List<T>、自定义类等),应再构造函数初始化赋默认值

示例

.Net Standard

公司里除了有新用的.NET Core项目还有大量的存量.NET Framework旧项目。

.NET Standard是一种规范,无法以此建立应用,但他能以库的形式作为支撑。.NET Standard的出现为了解决以编写一次的库来同时支持多个平台(.NET Framework、.NET Core、Xamarin)的使用。

为了实现多平台的API标准映射,不同版本的映射与数量也随着不一样

.NET Standard

1.0 1.1 1.2 1.3 1.4 1.5 1.6 2.0
.NET Core 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
.NET Framework 4.5 4.5 4.5.1 4.6 4.6.1 4.6.1  4.6.1  4.6.1
Mono 4.6 4.6 4.6 4.6 4.6 4.6 4.6 vNext
Xamarin.iOS 10.0 10.0 10.0 10.0 10.0 10.0 10.0 vNext
Xamarin.Android 7.0 7.0 7.0 7.0 7.0 7.0 7.0 vNext
Universal Windows Platform 10.0 10.0 10.0 10.0 10.0 vNext vNext vNext
Windows 8.0 8.0 8.1
Windows Phone 8.1 8.1 8.1
Windows Phone Silverlight 8.0

.Net Standard编译多版本程序集设置

右键编辑项目.csproj,可见下图原本应该是TargetFramework的节点,改为TargetFrameworks(多了个s),通过分号区分不同的程序集,因为RestSharp需要到.NET Framework4.6支持,因为我填入了net46。

接口测试

单元测试

百度定义:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。

单元:可以是C语言中单元指一个函数,C#、Java里单元指一个类。总的来说,单元就是人为规定的最小的被测功能模块。

然而我的示例代码里的单元测试并非正统规范的单元测试,而是利用单元测试项目来做接口的测试并做负载测试的可运行代码。因此大家不必学习我的做法。

这里有微软的官方文档XUnit结合了mock框架,可供大家学习传送门

负载测试

百度定义:负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。

1.对于使用VS2017的可以先到工具-获取工具与功能,勾上Web性能与负载工具

2.添加Web性能和负载测试项目,该项目只能是.NET Framework

3.添加负载测试,并选择本地负载测试,负载测试持续时间是此方案的测试总时间,测试迭代是测试方案的测试总次数

4.输入方案场景名称,并选择思考时间,思考时间可以理解成客户操作的停顿时间。

5.常量负载指模拟的每次测试固定并发数,分级负载则是模拟并发数持续递增。

6.选择需要进行负载测试的单元测试,上面我们编写SDK的单元测试来进行接口测试,因此我们可以选择Send单元测试方法,进行测试接口的性能如何。

7.点击完成,并运行负载测试

8.漫长的等待之后可以查看测试结果与关系图

需要注意的是,做负载测试的时候需要模拟并发请求,这里是占资源的,因此尽量把测试服务放到服务器上测试。

相关文章:

  • .net core实践系列之短信服务-为什么选择.net core(开篇)

  • .net core实践系列之短信服务-架构设计

  • .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

  • .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现

原文地址: https://www.cnblogs.com/skychen1218/p/9585277.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

.net core实践系列之短信服务-Api的SDK的实现与测试相关推荐

  1. .net core实践系列之短信服务-架构优化

    前言 通过前面的几篇文章,讲解了一个短信服务的架构设计与实现.然而初始方案并非100%完美的,我们仍可以对该架构做一些优化与调整. 同时我也希望通过这篇文章与大家分享一下,我的架构设计理念. 源码地址 ...

  2. .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

    前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...

  3. .net core实践系列之短信服务-架构设计

    前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...

  4. .net core实践系列之短信服务-为什么选择.net core(开篇)

    前言 从今天我将会写.net core实战系列,以我最近完成的短信服务作为例子.该系列将会尽量以最短的时间全部发布出来.源码也将优先开源出来给大家. 源码地址:https://github.com/S ...

  5. 使用阿里云短信服务API实现短信验证码以及短信服务通知

    使用阿里云短信服务API实现短信验证码以及短信服务通知 前言 一 .短信调用简要说明 二 .官方不带签名原生态测试demo 调用结果如下 三 .以上为不带模板和签名的API调用结果 下面加入签名和模板 ...

  6. 阿里大于短信服务API Demo及使用说明

    关于短信验证,本人使用的是阿里大于的服务平台.不啰嗦废话,直接上步骤: 首先需要在阿里大于短信服务国内消息中注册个性签名及短信模板.这里需费些时间,只要注册成功,便可以使用验证功能了.下面是短信模板截 ...

  7. 阿里云短信服务API怎么调用

    今天来搞一下阿里云短信服务来实现发送短信功能,其实能提供短信发送服务的平台有很多,但这里我选择的是阿里云,因为阿里云的示例还有代码封装的很简洁,使用起来非常简单,上手非常快,那么费话不多说我们直接开始 ...

  8. 微信小程序云开发,使用阿里云短信服务,搜索员工生日定期发送短信。

    相关API文档地址: 阿里云短信服务API文档地址 小程序云开发云函数正则匹配API文档地址 小程序云开发云函数定时触发器 1.登录阿里云,购买短信服务并添加签名和模板 2., 登录阿里云,鼠标放在右 ...

  9. vue+springboot+阿里云短信服务(集成redis实现验证码登录业务)

    阿里云短信服务-介绍 阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力.调用API或用群发助手,即可发送验证码.通知类和营销类短信:国内验 ...

最新文章

  1. 《c++语言导学》——1.7 常量
  2. 在 .NET 中创建对象的几种方式的对比
  3. limit实现原理 mysql_解读数据库:深入分析MySQL中事务以及MVCC的实现原理
  4. JDK 11 将引入低延迟 GC,大幅度缩短 GC 暂停时长
  5. Linux中断处理:上半部和下半部
  6. java给xml加入值,怎么用java读取XML文件里的值并加入jsp页面中的下拉列表中
  7. 语音分析应用场景——来电原因分析与运营效率提升
  8. lavavel php 手册,Laravel文档工具
  9. 电脑如何录制正在播放的视频 这个方法太简单了
  10. LeaRun敏捷开发框架快速设计表单
  11. meshlab模型简化
  12. Python爬虫实战-小说网站爬虫开发
  13. 斯坦福NLP名课带学详解 | CS224n 第17讲 - 多任务学习(以问答系统为例)(NLP通关指南·完结)
  14. 基于51单片机智能小车的设计与实现
  15. PTA L1-088 静静的推荐
  16. three.js 控制动画进度 进度条拖拽控制
  17. 又猎一“狐”:一名外逃越南嫌疑人落网啦
  18. WIN7下默认网关丢失该如何解决
  19. 微信小程序创建节点选择器获取宽高wx.createSelectorQuery
  20. 你的苹果Mac键盘锁住了要怎么办呢

热门文章

  1. React Native在Android当中实践(五)——常见问题
  2. python字符串格式化方法 format函数的使用
  3. 2016 CCPC 杭州
  4. Nginx实现tomcat集群进行负载均衡
  5. 上海女白领吃火锅碰瓷,支付宝口碑居然真的要赔?
  6. Android百度地图开发01之初体验
  7. Facebook应用Moments使用C++实现跨平台代码共享
  8. 三种方式使得iOS应用能够在后台进行数据更新和下载
  9. Windows 11 快速体验:开始菜单居中,全系圆角设计!
  10. fiddler插件开发