您的位置:首页 > 编程语言 > C#

关于C#中的API的定义

2014-05-07 12:53 253 查看
 最近在公司一直研究两方面内容,一方面是api的定义,一个就是C#中的MVC框架。今天来总结一下关于api的定义。

  api 就是接口,它主要是向使用它的人提供一系列的解决方法。每一本api的定义步骤基本 大同小异。由于现在对于一些要求不是很严格的软件采用的都是敏捷开发,所以我们可以很清楚的知道,一本api制作要经过三层结构,这三层分别是wcf层、service层、BL层。

 首先我们来了解一下这三层结构分别得作用。第一层wcf层主要是定义接口,它定义的是前台传来的URL接口以及相关的响应接口方法,然后使用另外一个类继承并实现这个接口方法。接下来我们需要在实现类中进行相关的处理,这里的处理主要有以下几项,

1、写日志(为方便以后对api的负荷测试之类的使用);

2、进行Oauth认证,现在有很多的网站都会有相关的内容,关于Oauth认证的详细,以后再聊。

3、创建相关的key,用于在当前缓层中查找相关的内容。(如果在缓层中能够查找到对应的key值,接下来就不用做任何操作,只需将缓层中的数据返还即可,这样会在很大程度上减小数据库的压力,也能很快响应前台的请求。但是当前缓层中要是没有相关的数据,那么我们就得去数据库中找数据了。)

4、缓层中没有数据,我们就需要调用BL层的方法取数据。但是BL层只提供 了接口方法,不过在其实现层中提供了相关的实现,这样就方便了我们的使用,BL主要的作用就是与数据库打交道。BL层在数据库中找数据,找到的数据就需要我们存放到一个DTO(数据传输对象)中。但是这还不是重点,BL层的重点是取数据。由于微软对于数据库取数据的方法提供了很多种可能,我们可以使用微软的LINQ、也可以使用传统的SQL文,还可以使用存储过程(Stored Procedure)。这三个各有千秋。这里不作详谈。

5、BL层从数据库中取完数据后,需要将数据存放到一个DTO实体中,然后返回到Service层,Service层接受完数据后,不算完事大吉,这时候还需要根据要求将其转换成一定的结构,常用的结构是JSON格式。

6、最后将这个JSON格式串返回请求。

  这样一套流程走下来基本上就算是完成了一本api的新规。但是对于api的新规不算完事,重头戏还在后头,那就是我们常见的测试。

  一般来讲公司里对于api的测试会有所不同,一般会有两种,一种是UT测试,一种是BT测试。所谓UT测试就是单元测试,他需要将自己在api中定义的每一个方法都要测试一遍,保证它的准确性,换句话说他是测试准确率。BT测试就是行为测试,他要求我们将自己写的api中的每一种可能的情况包括取数据的每一种可能都要跑到,换句话说它是测试覆盖率。

  一般来讲,一本新规的api需要自己在数据库中造数据才能测试,但是在UT测试的时候还不需要,在UT测试的时候,测试service层时我们使用Mock来模拟取出的数据,这样还算比较容易,难点是在对于BL层的UT测试,它本身是和数据库连接来取数据的,所以,这时候我们需要自己往数据库种茶数据,以满足我们写的每一条case。当然微软已经为我们提供了相关的方法,所以我们不需要担心每一次都需要自己手动在数据库中加数据,也不必担心自己插的数据会不会在整体上影响到实际的数据。

 说完这两点,或许你还没有什么太大的概念,但是我需要告诉你的是,在UT测试的时候难点不是造数据,难点是如何设计你的case,一般来讲我们可以先写异常系,考虑他可能会出错的几种情况,一般来讲,出错的几种情况无非就是几种异常。难就难在正常系,当我们的参数越多,我们的正常系case也就随之变得很多。对于正常系的case,首先我们考虑所有参数全部正确的情况,取到数据,和取不到数据,接下来,我么就需要考虑各种参数不正确的情况。

这样我们的UT设计也就基本完成,写完case还得让他跑成功啊。所以我们常常借用Nunit或者是Resharper自带的。详细不作介绍。

完成了UT我们还需要设计BT。

接下来我们看一下BT测试。首先类看一下基本的格式

Feature: api名称

相关的信息。

@mytag

Scenario Outline: 要测试的问题

Given 传入的参数的設定

When 使用什么方法处理

Then 进行结果的比对

Examples:

| 参数1 | 参数2 | 结果 |

| 1000 | 1500000900 | 400 |

这样一个基本的BT测试用例就出来了,关于其中的一些标签不作详细介绍。

  BT就这样简单? no。BT测试怎么会就这么简单呢,这还只不过是他的界面格式,实际内容还有很多。首先关于参数怎么设定,这就需要我们写一个类PlatformArgamaStepDefinitions来进行具体的定义。基本格式如下

#region 设置内容

[Given(@"设置的内容参数")]

public void Given参数设定(string 参数)

{

//处理方法

}

#endregion

这样一个参数设定的内容就基本设定完毕。那么使用什么方法处理怎么解决呢?同样还是在着各类中定义,它的格式如下

[When(@"处理方式")]   //注意这里的名称要与上文中when后的一摸一样

public void When处理方法()

{

     //详细的处理过程

    //在这里我们需要调用相关的方法,进而去调用我们自己的api

}

关于then的格式其实差不多,如下:

[Then(@"传参和相关信息描述")]

public void Then相关信息的描述(int p0)

{

//获得数据并用assert进行判断

}

   了解了BT测试的基本格式之后我们需要了解详细的BTcase的设计。BTcase测试的重点是要讲我们在api中的每一种可能都包含,但不需要重复。刚才我们已经经过的UT测试,确保了函数的正确性之后,我们需要测试整体结果是否理想。所以这一步的重点应该有以下几个方面。

第一:我们取数据时候有可能会出现的情况

第二:数据取完之后返回到service层会进行相关的封装,封装函数作为我们的预期结果。

   好了,对于第一条我们重点是考虑我们的存储过程或者SQL文或者是LINQ语句。首先考虑我们取数据的属性有哪些?也就是我们select之后的内容。其次我们要测试sql语句设计的数据表,应该考虑到这些表可能存在没数据的 情况。最后对于判定的情况应该设计两条数据让他能将几种可能都跑到。

这样一套流程结束后在进行以下负荷测试就算基本结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: