.net core实践系列之短信服务-Api的SDK的实现与测试
前言
上一篇《.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的实现与测试相关推荐
- .net core实践系列之短信服务-架构优化
前言 通过前面的几篇文章,讲解了一个短信服务的架构设计与实现.然而初始方案并非100%完美的,我们仍可以对该架构做一些优化与调整. 同时我也希望通过这篇文章与大家分享一下,我的架构设计理念. 源码地址 ...
- .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现
前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...
- .net core实践系列之短信服务-架构设计
前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...
- .net core实践系列之短信服务-为什么选择.net core(开篇)
前言 从今天我将会写.net core实战系列,以我最近完成的短信服务作为例子.该系列将会尽量以最短的时间全部发布出来.源码也将优先开源出来给大家. 源码地址:https://github.com/S ...
- 使用阿里云短信服务API实现短信验证码以及短信服务通知
使用阿里云短信服务API实现短信验证码以及短信服务通知 前言 一 .短信调用简要说明 二 .官方不带签名原生态测试demo 调用结果如下 三 .以上为不带模板和签名的API调用结果 下面加入签名和模板 ...
- 阿里大于短信服务API Demo及使用说明
关于短信验证,本人使用的是阿里大于的服务平台.不啰嗦废话,直接上步骤: 首先需要在阿里大于短信服务国内消息中注册个性签名及短信模板.这里需费些时间,只要注册成功,便可以使用验证功能了.下面是短信模板截 ...
- 阿里云短信服务API怎么调用
今天来搞一下阿里云短信服务来实现发送短信功能,其实能提供短信发送服务的平台有很多,但这里我选择的是阿里云,因为阿里云的示例还有代码封装的很简洁,使用起来非常简单,上手非常快,那么费话不多说我们直接开始 ...
- 微信小程序云开发,使用阿里云短信服务,搜索员工生日定期发送短信。
相关API文档地址: 阿里云短信服务API文档地址 小程序云开发云函数正则匹配API文档地址 小程序云开发云函数定时触发器 1.登录阿里云,购买短信服务并添加签名和模板 2., 登录阿里云,鼠标放在右 ...
- vue+springboot+阿里云短信服务(集成redis实现验证码登录业务)
阿里云短信服务-介绍 阿里云短信服务(Short Message Service)是广大企业客户快速触达手机用户所优选使用的通信能力.调用API或用群发助手,即可发送验证码.通知类和营销类短信:国内验 ...
最新文章
- 《c++语言导学》——1.7 常量
- 在 .NET 中创建对象的几种方式的对比
- limit实现原理 mysql_解读数据库:深入分析MySQL中事务以及MVCC的实现原理
- JDK 11 将引入低延迟 GC,大幅度缩短 GC 暂停时长
- Linux中断处理:上半部和下半部
- java给xml加入值,怎么用java读取XML文件里的值并加入jsp页面中的下拉列表中
- 语音分析应用场景——来电原因分析与运营效率提升
- lavavel php 手册,Laravel文档工具
- 电脑如何录制正在播放的视频 这个方法太简单了
- LeaRun敏捷开发框架快速设计表单
- meshlab模型简化
- Python爬虫实战-小说网站爬虫开发
- 斯坦福NLP名课带学详解 | CS224n 第17讲 - 多任务学习(以问答系统为例)(NLP通关指南·完结)
- 基于51单片机智能小车的设计与实现
- PTA L1-088 静静的推荐
- three.js 控制动画进度 进度条拖拽控制
- 又猎一“狐”:一名外逃越南嫌疑人落网啦
- WIN7下默认网关丢失该如何解决
- 微信小程序创建节点选择器获取宽高wx.createSelectorQuery
- 你的苹果Mac键盘锁住了要怎么办呢