我们来看一个简单的PHP实现的超简单的接口。

...
 
//报名验证
private function apply_verify() {
    $raid = $this->input->get_post('raid');
    $mid = $this->input->get_post('mid');
 
    if (!$raid || !$mid) {
        $this->ret_json(10021, '参数错误');
    }
 
    $this->load->model('enlist_model');
    $result = $this->enlist_model->get_enlist_by_raid_mid($raid, $mid, true);
    if (!empty($result)) {
        $this->ret_json(10101, '你已经报过名');
    }
}
 

说明:

首先,它是一个POST接口。它需要两个参数:raid 和 mid。
然后,判断raid 和 mid 是否为空,为空返回:参数错误。
最后,调用 enlist_model 模型,通过 get_enlist_by_raid_mid方法查询是否为空,如果不为空返回:你已经报过名了。
接下来要做的事情不是写用例,而是构造一条已经报名的数据。

创建 xx_enlist_test_data.php 文件

array(
    'table_name'=>'xx_enlist',
    'data'=>array(
        array('eid'=>1,'raid'=>99,'mid'=>150,'phone'=>'01234567890'),
    )
)

当自动化在执行之前,会先到数据库的 xx_enlist 表插入这条数据,为什么要初始化数据?当然是为了保证接口测试用例的稳定性。比如,我在调用接口时,传入 raid=99, mid=150。如果数据库是表空的?那么,用例肯定失败了!如何保证这条用每次运行 100% 成功呢?当然是每次执行之前再对应的表中初始化这么一条数据了!

定义的数据怎么插入到数据库中,当然是有一层解析的,将上面的数据库转成一条SQL语句执行。上面的数据当然比原生的一条插入SQL语句好写。

最后,才是开始写用例。创建interface_enlist_test.php测试文件。

class Interface_enlist_test extends InterfaceTestCase
{
    //初始化数据
    public function db_fixtures()
    {
        return array(
            array(
                'data_file' => 'xx_enlist_test_data.php',
                'truncate'  => true
            ),
        );
    }
 
 
    /*
    * 报名验证
    * raid不传
    */
    public function test_post_enlist_raid_null()
    {
        $result = $this -> request('enlist/apply_verify',array(),array('mid'=>150));
        $this->assertEquals($result['status'],'10021');
        $this->assertEquals($result['message'],"参数错误");
    }
 
    /*
    * 报名验证
    * mid不传
    */
    public function test_post_enlist_mid_null()
    {
        $result = $this -> request('enlist/apply_verify',array(),array('raid'=>99));
        $this->assertEquals($result['status'],'10021');
        $this->assertEquals($result['message'],"参数错误");
    }
 
    /*
    * 报名验证
    * 用户已报名
    */
    public function test_post_enlist_verify_success()
    {
        $result = $this -> request('enlist/apply_verify',array(),array('raid'=>99, 'mid'=>150));
        $this->assertEquals($result['status'],'10101');
        $this->assertEquals($result['message'],"你已经报过名");
    }
}

这里的用例我就做过多解释了。调用接口写断言

答疑环节

我知道你们大概会有哪些疑问,接下来,我将试着解答这些疑问。

1、我怎么知道接口调用了哪些表?

2、看不懂开发代码怎么办?

3、往数据库里面插入测试数据,有重复的怎么办?

4、这样做接口测试有什么好处?

5、这样做接口测试的缺点是什么?

不过,我仍然认为这是一个优秀的接口测试工程师应该努力的方法。接口测试平台解决的只是测试效率问题,如何把一个接口测好?当然是理解好需求,并有能力阅读接口处理逻辑,设计出有效和全面的接口用例。

其实,这篇文章所传达的思想,我在《Web接口开发与自动化测试--基于Python语言》一书都有介绍,只是换了个语言和框架而已。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

PHP接口自动化测试框架实现-LMLPHP

 视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。     

01-05 00:38