蘇寧發(fā)票中心自助開(kāi)票,測(cè)試自動(dòng)化減負(fù)初實(shí)踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】
前言
蘇寧發(fā)票中心系統(tǒng)自2014年以來(lái)先后接入增值稅電子普通發(fā)票、增值稅專用發(fā)票、增值稅普通發(fā)票、增值稅普通發(fā)票(卷式)等四種發(fā)票類型的開(kāi)具。從業(yè)務(wù)上來(lái)看,接收線上易購(gòu)、零售云、金融、貓寧、當(dāng)當(dāng)、天貓分銷、蘇寧有房、北京節(jié)能補(bǔ)貼、政企對(duì)公、香港票據(jù)、電商能力輸出、蘇寧卡、大潤(rùn)發(fā)、卜蜂蓮花、蘇鮮生等訂單并提供開(kāi)票服務(wù)。
自動(dòng)化解決方案
俗話說(shuō),頭大的問(wèn)題造就大頭的智慧;那,我們先來(lái)說(shuō)說(shuō)為什么要做自動(dòng)化?
蘇寧發(fā)票中心開(kāi)票系統(tǒng),如前言所述,負(fù)責(zé)蘇寧集團(tuán)內(nèi)外部所有業(yè)務(wù)開(kāi)票服務(wù),對(duì)接上下游N個(gè)業(yè)務(wù)和系統(tǒng),在各相關(guān)系統(tǒng)有新的功能開(kāi)發(fā)時(shí),涉及發(fā)票中心無(wú)改動(dòng),但常需要配合聯(lián)測(cè),提供開(kāi)票服務(wù),而這不定時(shí)的各種各樣的數(shù)據(jù)配合聯(lián)測(cè),耗費(fèi)了團(tuán)隊(duì)巨大的時(shí)間和精力。
舉個(gè)例子,某項(xiàng)目增票配合測(cè)試,因?yàn)樵鲋刀悓!⑵掌遍_(kāi)具需要先定位數(shù)據(jù)是否接收到,然后檢查數(shù)據(jù)是否符合開(kāi)票條件,然后執(zhí)行定時(shí)任務(wù)轉(zhuǎn)待開(kāi),鎖定,開(kāi)票,郵寄導(dǎo)入。
對(duì)于如上這么多的操作步驟,我們做過(guò)測(cè)算,人工平均開(kāi)一張票需6min,在項(xiàng)目3天左右的集中聯(lián)測(cè)周期內(nèi)共需配合開(kāi)具100張以上發(fā)票,消耗測(cè)試資源100(張)*6(min/張)/60(min)/8(人天)=1.25人天,也就是說(shuō),如果實(shí)現(xiàn)完全自動(dòng)化,無(wú)需測(cè)試人員介入,單張發(fā)票開(kāi)具在2min內(nèi)完成,聯(lián)測(cè)周期內(nèi)***可節(jié)省42%的測(cè)試總?cè)颂?。要提升配合?lián)測(cè)效率,釋放團(tuán)隊(duì)資源,提高測(cè)試專注度,這個(gè)問(wèn)題的解決,則變得刻不容緩。
我們?cè)O(shè)計(jì)了一個(gè)較優(yōu)的解決方案是什么?有哪些優(yōu)點(diǎn)?
有人會(huì)說(shuō),MOCK啊,N年前就有的問(wèn)題解決方案!可是,MOCK數(shù)據(jù)的“老少通吃”,“呆頭呆腦”的“妄下結(jié)論”,實(shí)在難以滿足復(fù)雜的業(yè)務(wù)場(chǎng)景和真實(shí)數(shù)據(jù)的處理,用一句概括就是存在風(fēng)險(xiǎn)且容易失真。
拿發(fā)票中心來(lái)講,上游系統(tǒng)下傳真實(shí)的測(cè)試數(shù)據(jù),我們需要對(duì)請(qǐng)求開(kāi)票的數(shù)據(jù)的稅率、會(huì)員、支付、收貨狀態(tài)做判斷并處理。如上所述復(fù)雜過(guò)程都需要按實(shí)際開(kāi)票鏈路實(shí)現(xiàn),這也是集成測(cè)試基本準(zhǔn)則要求之一,采用MOCK方式不可取。同時(shí),發(fā)票中心針對(duì)來(lái)源系統(tǒng)不同、票種不同也需要合并或者其他方式的處理數(shù)據(jù),僅就一個(gè)合并功能,MOCK技術(shù)難以實(shí)現(xiàn)。
為解決此問(wèn)題,經(jīng)過(guò)相關(guān)人員的通力合作,秉承***程度用機(jī)器替代人工干預(yù)的思路,利用團(tuán)隊(duì)內(nèi)現(xiàn)有的自動(dòng)化技術(shù),總算是有了一個(gè)相對(duì)不錯(cuò)且相對(duì)單獨(dú)的解決方案。
方案簡(jiǎn)述
前臺(tái):為方便上游開(kāi)票需求人員的使用,使用Web頁(yè)面進(jìn)行數(shù)據(jù)輸入,提供開(kāi)票界面和開(kāi)票結(jié)果查詢界面;
后臺(tái):使用以”簡(jiǎn)潔”和“膠水語(yǔ)言”著稱的Python實(shí)現(xiàn),提供開(kāi)票和開(kāi)票結(jié)果查詢接口,供前端調(diào)用;并將接收到的數(shù)據(jù)進(jìn)行數(shù)據(jù)分析、數(shù)據(jù)校驗(yàn)、MySQL數(shù)據(jù)查詢、邏輯計(jì)算,進(jìn)而將可開(kāi)票數(shù)據(jù)進(jìn)行定時(shí)任務(wù)執(zhí)行、調(diào)用IE開(kāi)票、屏幕截圖保存、日志寫入保存等操作,實(shí)現(xiàn)完整的開(kāi)票流程。
此解決方案優(yōu)點(diǎn):
1、普適性高,目前任何上游需開(kāi)票項(xiàng)目均可使用;
2、票種和環(huán)境隨意切換;
3、問(wèn)題定位反饋精準(zhǔn);
4、***用戶操作更簡(jiǎn)單直接,執(zhí)行效率高;
5、執(zhí)行結(jié)果無(wú)需切換系統(tǒng)查看,查詢更直觀;
6、測(cè)試人員基本0占用,人力資源基本0消耗。
Web前端,vue.js結(jié)合element組件,打造極簡(jiǎn)界面
為開(kāi)票人員提供查詢界面,可通過(guò)關(guān)鍵信息查詢開(kāi)票結(jié)果圖片,開(kāi)票詳細(xì)日志。
開(kāi)票結(jié)果查詢?cè)斍椋?/p>
復(fù)雜的表單輸入,轉(zhuǎn)化為簡(jiǎn)單的三個(gè)輸入條件,并且將過(guò)程執(zhí)行日志,問(wèn)題提示,錯(cuò)誤信息,紅色報(bào)錯(cuò)等,全數(shù)收入。
通過(guò)簡(jiǎn)單的權(quán)限限制,為我方人員提供數(shù)據(jù)流水界面(開(kāi)票人員不可見(jiàn)),方便統(tǒng)計(jì)與問(wèn)題分析。
Web,Python與Command的化學(xué)反應(yīng),設(shè)計(jì)簡(jiǎn)單的權(quán)限控制
局域網(wǎng)內(nèi),開(kāi)關(guān)機(jī),斷聯(lián)網(wǎng)均可能導(dǎo)致IP的變更,故我們選擇加域的計(jì)算機(jī)全名(其他唯一標(biāo)識(shí)也可,為確定具體人員,故我們選擇加域的計(jì)算機(jī)全名),作為權(quán)限控制切入點(diǎn)。
Web通過(guò)axios將接口數(shù)據(jù)傳給Python的flask,flask接收數(shù)據(jù)的同時(shí)獲取其請(qǐng)求ip,通過(guò)ip獲取計(jì)算機(jī)全名(Windows系統(tǒng)下通過(guò)nbtstat命令,linux下通過(guò)nmblookup命令,Python亦可通過(guò)socket.getfqdn(ip)等方式),通過(guò)域名獲取配置,以此判斷請(qǐng)求者所能看到的頁(yè)面(未配置則為默認(rèn)頁(yè)面);并且通過(guò)前端路由跳轉(zhuǎn),避免跳過(guò)權(quán)限檢查,直接訪問(wèn)地址的情況。
Python的邏輯判斷與自動(dòng)化操作,像機(jī)器一樣運(yùn)轉(zhuǎn)
通過(guò)前端輸入的三個(gè)條件,Python后臺(tái)接收到接口數(shù)據(jù)后,進(jìn)行相關(guān)的業(yè)務(wù)判斷,包括且不限于數(shù)據(jù)檢查,數(shù)據(jù)核驗(yàn),開(kāi)票池檢查,通過(guò)requests接口自動(dòng)化執(zhí)行定時(shí)任務(wù)以及執(zhí)行結(jié)果獲取,等一系列自動(dòng)判斷,不可開(kāi)票則返回前端報(bào)錯(cuò),可開(kāi)票則將獲得的數(shù)據(jù)傳入selenium操作的IE瀏覽器開(kāi)票界面,進(jìn)行自動(dòng)開(kāi)票。
為什么用IE?
開(kāi)票業(yè)務(wù)系統(tǒng)本身設(shè)計(jì),在開(kāi)票時(shí),是通過(guò)ActiveX調(diào)用本地的航信客戶端,進(jìn)行開(kāi)票。所以,ActiveX,你懂得。
既然要調(diào)本地客戶端,問(wèn)題豈不~
是的,問(wèn)題多多
之一,我們排除了調(diào)用開(kāi)票人員本機(jī)客戶端的方案(裝客戶端,設(shè)置IE,調(diào)用本機(jī)程序等,過(guò)于復(fù)雜)。
之二,我們根據(jù)當(dāng)前業(yè)務(wù)量,選擇使用一臺(tái)Windows終端機(jī)作為承載,所有的代碼部署和開(kāi)票操作,均在此機(jī)器完成。
之三,開(kāi)票結(jié)束后,因開(kāi)票軟件本身的安全性限制,直接保存票據(jù)會(huì)丟失部分信息,故選擇使用pywinauto***化票據(jù)展示客戶端,通過(guò)Python進(jìn)行全屏截圖。
之四,截圖和日志一并保存在此機(jī)器上,前端通過(guò)接口直接請(qǐng)求即可查看詳情。
之五,拓展成長(zhǎng)方案:若使用linux部署web和python的業(yè)務(wù)邏輯的代碼,通過(guò)socket實(shí)現(xiàn)linux和Windows指令和數(shù)據(jù)的傳輸,Windows性能機(jī)作為IE開(kāi)票和票據(jù)截圖的承載,以此來(lái)說(shuō),多臺(tái)性能機(jī)亦可承載分別的開(kāi)票工作,故而實(shí)現(xiàn)并發(fā)的開(kāi)票請(qǐng)求。
那么亂,還不歸納一下
整體來(lái)說(shuō),開(kāi)票鏈路自動(dòng)化實(shí)現(xiàn)和問(wèn)題解決過(guò)程如下:
- 在Windows性能機(jī)上部署Python代碼和Web代碼,設(shè)置ip和端口,啟動(dòng)flask監(jiān)聽(tīng);
- 開(kāi)票人員即可通過(guò)相應(yīng)的http地址訪問(wèn)開(kāi)票頁(yè)面,輸入數(shù)據(jù),開(kāi)始開(kāi)票;
- 接口接收到開(kāi)票數(shù)據(jù),通過(guò)Python后臺(tái)的邏輯處理,有問(wèn)題則返回前端,無(wú)問(wèn)題則自動(dòng)調(diào)用IE開(kāi)票,IE調(diào)用本地航信開(kāi)票;
- 開(kāi)票結(jié)束自動(dòng)截圖保存在本地,過(guò)程日志同樣記錄在本地,開(kāi)票流水日志記錄在MySQL;
- 之后返回開(kāi)票結(jié)果至前端,實(shí)際開(kāi)票人員通過(guò)相關(guān)信息即可查詢票據(jù)圖片,開(kāi)票日志,管理人員即可通過(guò)開(kāi)票流水日志進(jìn)行相關(guān)的數(shù)據(jù)統(tǒng)計(jì)和管理工作。
總結(jié)
整個(gè)流程到此結(jié)束了,基本解決了我們聯(lián)測(cè)配合開(kāi)票的問(wèn)題。工具上線以來(lái),測(cè)試人員不再需要中斷正在進(jìn)行的新項(xiàng)目去配合開(kāi)票,提升了項(xiàng)目成員本身測(cè)試專注度,釋放了項(xiàng)目配合人力和時(shí)間約1.25人天/項(xiàng)目(單項(xiàng)目聯(lián)測(cè)人天3左右) ,提升開(kāi)票效率近70%,我們抽取了一條開(kāi)票數(shù)據(jù)的執(zhí)行l(wèi)og詳情,最直觀來(lái)展示復(fù)雜開(kāi)票過(guò)程的效率:
隨著時(shí)間的推移、項(xiàng)目的迭代和工具的完善,收益會(huì)也在逐步累加,配合開(kāi)票真正的減負(fù)也開(kāi)始突顯。而這一切的實(shí)現(xiàn)Python技術(shù)在測(cè)試自動(dòng)化中的應(yīng)用,起到了關(guān)鍵的作用。
下一版本規(guī)劃
本次雖然我們已經(jīng)實(shí)現(xiàn)了完整鏈路自動(dòng)開(kāi)票的能力,但由于從開(kāi)始著手做這個(gè)自助開(kāi)票(2019.2.12)到完整實(shí)現(xiàn)上線使用(2019.3.11)僅用1月,有很多工作項(xiàng)還未開(kāi)展,我們將在下一個(gè)版本加強(qiáng)幾方面功能:1、開(kāi)票服務(wù)能力分析和優(yōu)化;2、***直接用戶體驗(yàn)提升,便捷高效的使用;3、多端多線程開(kāi)票支持能力建設(shè);4、開(kāi)票問(wèn)題自動(dòng)處理機(jī)制等等。
期待我們下一個(gè)更優(yōu)的版本吧!
作者簡(jiǎn)介
仲崇瑞,蘇寧科技集團(tuán)員工平臺(tái)研發(fā)中心高級(jí)測(cè)試經(jīng)理,有多年的業(yè)務(wù)及產(chǎn)品設(shè)計(jì)經(jīng)驗(yàn)和測(cè)試管理經(jīng)驗(yàn),負(fù)責(zé)集團(tuán)財(cái)務(wù)核算、財(cái)務(wù)共享、稅務(wù)會(huì)計(jì)及智能應(yīng)用等產(chǎn)品的測(cè)試及管理工作,涉及功能、性能、自動(dòng)化、安全等測(cè)試領(lǐng)域,帶領(lǐng)團(tuán)隊(duì)多次出色完成財(cái)務(wù)系統(tǒng)變革和切換的測(cè)試工作,致力于構(gòu)建蘇寧財(cái)務(wù)類自動(dòng)化測(cè)試產(chǎn)品解決方案,打造高效便捷的測(cè)試應(yīng)用產(chǎn)品。
金業(yè)帥,蘇寧科技集團(tuán)員工平臺(tái)研發(fā)中心測(cè)試開(kāi)發(fā)工程師,負(fù)責(zé)測(cè)試工具產(chǎn)品的技術(shù)研究、實(shí)施,主要對(duì)接集團(tuán)財(cái)務(wù)、共享、稅務(wù)等系統(tǒng)的自動(dòng)化實(shí)現(xiàn),參與蘇寧發(fā)票中心,財(cái)務(wù)中臺(tái)等系統(tǒng)的自動(dòng)化測(cè)試開(kāi)發(fā)工作。精通Python應(yīng)用接口\后臺(tái)\客戶端開(kāi)發(fā),掌握Python與Java應(yīng)用、MySQL/hive/ES等數(shù)據(jù)庫(kù)調(diào)用技術(shù)及應(yīng)用調(diào)優(yōu);在自動(dòng)化測(cè)試框架實(shí)施過(guò)程中,有比較深入的分析設(shè)計(jì)能力和搭建經(jīng)驗(yàn)。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】