我們來(lái)看一個(gè)簡(jiǎn)單的PHP實(shí)現(xiàn)的超簡(jiǎn)單的接口。
...
//報(bào)名驗(yàn)證
private function apply_verify() {
$raid = $this->input->get_post('raid');
$mid = $this->input->get_post('mid');
if (!$raid || !$mid) {
$this->ret_json(10021, '參數(shù)錯(cuò)誤');
}
$this->load->model('enlist_model');
$result = $this->enlist_model->get_enlist_by_raid_mid($raid, $mid, true);
if (!empty($result)) {
$this->ret_json(10101, '你已經(jīng)報(bào)過(guò)名');
}
}
說(shuō)明:
- 首先,它是一個(gè)POST接口。它需要兩個(gè)參數(shù):raid 和 mid。
- 然后,判斷raid 和 mid 是否為空,為空返回:參數(shù)錯(cuò)誤。
- 最后,調(diào)用 enlist_model 模型,通過(guò)?
get_enlist_by_raid_mid
方法查詢是否為空,如果不為空返回:你已經(jīng)報(bào)過(guò)名了。
接下來(lái)要做的事情不是寫用例,而是構(gòu)造一條已經(jīng)報(bào)名的數(shù)據(jù)。
創(chuàng)建?xx_enlist_test_data.php
?文件
array(
'table_name'=>'xx_enlist',
'data'=>array(
array('eid'=>1,'raid'=>99,'mid'=>150,'phone'=>'01234567890'),
)
)
當(dāng)自動(dòng)化在執(zhí)行之前,會(huì)先到數(shù)據(jù)庫(kù)的?xx_enlist
?表插入這條數(shù)據(jù),為什么要初始化數(shù)據(jù)?當(dāng)然是為了保證接口測(cè)試用例的穩(wěn)定性。比如,我在調(diào)用接口時(shí),傳入?raid=99, mid=150
。如果數(shù)據(jù)庫(kù)是表空的?那么,用例肯定失敗了!如何保證這條用每次運(yùn)行 100% 成功呢?當(dāng)然是每次執(zhí)行之前再對(duì)應(yīng)的表中初始化這么一條數(shù)據(jù)了!
定義的數(shù)據(jù)怎么插入到數(shù)據(jù)庫(kù)中,當(dāng)然是有一層解析的,將上面的數(shù)據(jù)庫(kù)轉(zhuǎn)成一條SQL語(yǔ)句執(zhí)行。上面的數(shù)據(jù)當(dāng)然比原生的一條插入SQL語(yǔ)句好寫。
最后,才是開(kāi)始寫用例。創(chuàng)建interface_enlist_test.php
測(cè)試文件。
class Interface_enlist_test extends InterfaceTestCase
{
//初始化數(shù)據(jù)
public function db_fixtures()
{
return array(
array(
'data_file' => 'xx_enlist_test_data.php',
'truncate' => true
),
);
}
/*
* 報(bào)名驗(yàn)證
* 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'],"參數(shù)錯(cuò)誤");
}
/*
* 報(bào)名驗(yàn)證
* 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'],"參數(shù)錯(cuò)誤");
}
/*
* 報(bào)名驗(yàn)證
* 用戶已報(bào)名
*/
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'],"你已經(jīng)報(bào)過(guò)名");
}
}
這里的用例我就做過(guò)多解釋了。調(diào)用接口寫斷言。
答疑環(huán)節(jié)
我知道你們大概會(huì)有哪些疑問(wèn),接下來(lái),我將試著解答這些疑問(wèn)。
1、我怎么知道接口調(diào)用了哪些表?
首先你要懂PHP編程,然后熟悉Web開(kāi)發(fā)框架,申請(qǐng)代碼查看權(quán)限,閱讀接口處理邏輯,自然就知道接口調(diào)用哪些表。
2、看不懂開(kāi)發(fā)代碼怎么辦?
學(xué)唄!我當(dāng)年也不是一下子就看懂PHP代碼的,前后也學(xué)了兩三個(gè)月。
3、往數(shù)據(jù)庫(kù)里面插入測(cè)試數(shù)據(jù),有重復(fù)的怎么辦?
我們當(dāng)時(shí)的設(shè)計(jì)是,框架在運(yùn)行時(shí)會(huì)自動(dòng)化的修改被測(cè)試的接口項(xiàng)目將數(shù)據(jù)庫(kù)指到我本地,也就是說(shuō)我本地有一個(gè)跟測(cè)試環(huán)境一模一樣的數(shù)據(jù)庫(kù),每次在插入數(shù)據(jù)之前先清空表。
要保證本地?cái)?shù)據(jù)庫(kù)的表結(jié)構(gòu)和測(cè)試環(huán)境是一樣的。這其實(shí)也不難,開(kāi)發(fā)如果改到表會(huì)上傳SQL腳本,我只需要在本地?cái)?shù)據(jù)庫(kù)執(zhí)行一下就行了。
4、這樣做接口測(cè)試有什么好處?
- 首先,接口用例超級(jí)穩(wěn)定,穩(wěn)定是自動(dòng)化測(cè)試的?大敵?,做過(guò)自動(dòng)化的同學(xué)知道我在說(shuō)什么。在保證數(shù)據(jù)的基礎(chǔ)上,如果用例失敗了, 100% 是接口邏輯被改動(dòng)到了。
- 不依賴接口文檔,有幾個(gè)公司的接口文檔是非常詳細(xì),且及時(shí)維護(hù)的?我這種方式不需要接口文檔。
- 不?
盲測(cè)
,盲測(cè)就是把接口的參數(shù),每個(gè)類型試一遍,然后再排列組合,如果你不知道接口要調(diào)用哪個(gè)表的哪個(gè)字段來(lái)判斷條件,那么這種盲測(cè)依然覆蓋不到接口的所有處理邏輯。- 當(dāng)然更裝X(玩笑~?。瑢?shí)際情況是你測(cè)試接口的水平即全面又深入,比只會(huì)用 postman 盲測(cè)的同學(xué)厲害多了。
- 反向促進(jìn)接口代碼質(zhì)量,因?yàn)榈慕涌谟美帉懯腔陂喿x接口代碼的,有一個(gè)新來(lái)的PHP開(kāi)發(fā)被我叫到面前幾次,并直接指出對(duì)方的代碼邏輯錯(cuò)誤之后(分分鐘教他怎么做開(kāi)發(fā),哈哈!),它的接口提測(cè)質(zhì)量一下子提高了許多。
5、這樣做接口測(cè)試的缺點(diǎn)是什么?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-623807.html
- 不適合所有團(tuán)隊(duì),不是每個(gè)測(cè)試都懂開(kāi)發(fā)代碼的,比如,我們現(xiàn)在的接口用GO,如果我現(xiàn)在想達(dá)到無(wú)障礙閱讀GO接口代碼,也需要較高的學(xué)習(xí)成本。
- 不適合大型項(xiàng)目,我之前之所以可在這么玩,主要也是因?yàn)镻HP項(xiàng)目不大,如果是一個(gè)大型項(xiàng)目的話就不適合了,在微服務(wù)的架構(gòu)下,你甚至很難理清一個(gè)接口的調(diào)用關(guān)系。
不過(guò),我仍然認(rèn)為這是一個(gè)優(yōu)秀的接口測(cè)試工程師應(yīng)該努力的方法。接口測(cè)試平臺(tái)解決的只是測(cè)試效率問(wèn)題,如何把一個(gè)接口測(cè)好?當(dāng)然是理解好需求,并有能力閱讀接口處理邏輯,設(shè)計(jì)出有效和全面的接口用例。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-623807.html
到了這里,關(guān)于PHP接口自動(dòng)化測(cè)試框架實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!