日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从代码里提取的测试需求

發(fā)布時(shí)間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从代码里提取的测试需求 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?服務(wù)器端的測試,軟件需求基本等于產(chǎn)品說明書,只有大概,沒有詳盡。再需求不充分的情況下,我們可以從哪些方面來挖掘測試需求呢?

現(xiàn)已知需求:服務(wù)器支持對客戶端的版本升級,存在兩種升級規(guī)則:

第一:最低版本升級:按照客戶端的類型,如果當(dāng)前版本小于最低版本要求則需要進(jìn)行升級

第二:指定版本升級:根據(jù)某個(gè)客戶端類型+版本信息,強(qiáng)制或者提示升級到指定版本

????? 如果同時(shí)滿足2種升級規(guī)則,優(yōu)先匹配第二種。配置文件如下:

一般測試人員都能分析到以下兩點(diǎn)如下:

  • 兩種規(guī)則同時(shí)滿足時(shí),怎么選擇?
  • 第一種規(guī)則:當(dāng)前版本《 最低版本,則提示需要進(jìn)行升級。那當(dāng)前版本》最低版本的時(shí)候呢?
  • ? ? ? ? ? 第二種規(guī)則:當(dāng)前版本《 最低版本,則需要強(qiáng)制升級,那當(dāng)前版本》最低版本的時(shí)候呢?

    ?假設(shè)當(dāng)前客戶端類型只有一種,設(shè)只有PC客戶端,一般都能寫出以下的測試用例:

    ?

    ??那這樣的設(shè)計(jì),算全面了么,再深入一層分析,又缺少了什么呢?

    1、? 產(chǎn)品和兩個(gè)規(guī)則的關(guān)系如何?1對1,1對多?每個(gè)產(chǎn)品都可能存在多個(gè)指定版本升級的規(guī)則?

    2、? 總共運(yùn)營上存在14個(gè)產(chǎn)品,每類產(chǎn)品都需要覆蓋測試?

    3、? 客戶端與服務(wù)器是怎么進(jìn)行交互的,客戶端傳遞什么數(shù)據(jù)到服務(wù)器,服務(wù)器返回什么給客戶端?升級的整個(gè)流程是什么樣的,清楚么?

    4、? 之前考慮的第二點(diǎn),太粗糙,》之外的,除了《,還有 = 。

    ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    客戶端和服務(wù)器端的接口核心函數(shù)代碼如下:

    //GetProductItem為服務(wù)器端與客戶端之間的接口函數(shù),客戶端傳szProductID,szVersion給服務(wù)器端,然后服務(wù)器就此作出判斷,返回正確的數(shù)據(jù)到item類中,供客戶端調(diào)用。

    bool CConfig::GetProductItem(const CHAR *szProductID, const CHAR *szVersion, ProductItem &item)

    {

    // 先根據(jù)ProductID確定產(chǎn)品的ProductDetail

    ??? ProductDetail *pProduct = FindProduct(szProductID);

    ??? //如果客戶端傳遞的szProductID為空,則用默認(rèn)的

    ??? if (!pProduct)

    ??? {

    ? ?//m_strDefaultProduct存儲從配置文件中讀取的DefaultProduct的ID

    ????? pProduct = FindProduct(m_strDefaultProduct.c_str());

    ?? //如果默認(rèn)的為空,則直接返回false

    ??????? if (!pProduct)

    ??????? {

    ??????????? return false;

    ??????? }

    ?}

    ?

    //根據(jù)szVersion在確定的ProductID內(nèi)得到grayupdate配置的版本

    //find()函數(shù)返回一個(gè)迭代器指向鍵值為key的元素,如果沒找到就返回指向map尾部的迭代器

    ??? auto iter = pProduct->mapVersionInfo.find(szVersion);

    ??? //如果沒有找到,就用默認(rèn)版本信息(強(qiáng)制升級塊)

    ??? if (iter == pProduct->mapVersionInfo.end())

    ??? {

    ??????? iter = pProduct->mapVersionInfo.find(DEFAULT_VERSION);

    ??????? if (iter == pProduct->mapVersionInfo.end())

    ??????? {

    ??????????? return false;

    ??????? }

    ??? }

    ?

    // 在服務(wù)器端將strMinVersion,strNewVersion,lsDownloadUrl存在item,返回給客戶端,由客戶端控制怎么強(qiáng)制升級還是提示升級。

    ??? item.strProductID = pProduct->strProductID;

    ??? item.strWebServicesURL = m_strWebServicesURL;

    ??? item.strMinVersion = iter->second.strMinVersion;

    ??? item.strNewVersion = iter->second.strNewVersion;

    ??? item.lsDownloadUrl = iter->second.lsDownloadUrl;

    ?

    ??? return true;

    }

    FindProduct的實(shí)現(xiàn)過程如下:

    服務(wù)器在等待客戶端發(fā)送客戶端相關(guān)數(shù)據(jù)過來前,服務(wù)器啟動時(shí),就加載配置文件,讀取對應(yīng)服務(wù)器下的配置文件<CONFIG>里的數(shù)據(jù)到szConfig中,然后調(diào)用LoadConfig的方法。

    //LoadConfig方法作用:將配置文件里的數(shù)據(jù),默認(rèn)配置的產(chǎn)品ID讀取到szProductID,產(chǎn)品的其他所有信息讀取到pProductDetail中。

    BOOL CConfig::LoadConfig(const CHAR *szConfig)

    {

    ??? if (NULL == szConfig)

    ??????? return FALSE;

    ?

    ??? TiXmlElement element("");

    element.Parse(szConfig, NULL, TIXML_ENCODING_UTF8);

    ?

    // 取配置信息中DefaultProduct元素的數(shù)據(jù)存在szProductID中。

    ??? const CHAR *szProductID = TiXmlGetValue(&element, "DefaultProduct");

    ??? if (!szProductID || strcmp(szProductID, "") == 0)

    ??? {

    ??????? return FALSE;

    ??? }

    ??? m_strDefaultProduct = szProductID;

    ?

    // szWebServicesURL 變量暫時(shí)未被使用(以前的舊代碼),可以忽略

    ? const CHAR *szWebServicesURL = TiXmlGetValue(&element, "WebServicesURL");

    ??? if (szWebServicesURL)

    ??? {

    ??????? m_strWebServicesURL = szWebServicesURL;

    }

    ?

    //讀取配置文件中Product的第一個(gè)元素的信息,將里面的值返回pProductDetail類中

    ?? TiXmlElement *pProductDetail=element.FirstChildElement("Product");

    ??? if (!pProductDetail || !ReadProductDetail(pProductDetail))

    ??? {

    ??????? return FALSE;

    ??? }

    ??? return TRUE;

    }

    ?ReadProductDetail函數(shù)的作用就是將product下對應(yīng)的部分?jǐn)?shù)據(jù),讀取到pProductDetail的成員變量strProductID和mapVersionInfo(版本集合內(nèi)).

    ? ? ?看完代碼,得知的大致流程如下:首先服務(wù)一啟動,就會將每個(gè)Product下的pProductDetail保存起來,然后客戶端發(fā)送szProductID,szVersion給服務(wù)器端,服務(wù)器端首先是在m_lsProduct(list)下查找出自己對應(yīng)的pProductDetail信息,如果沒有找到,則使用默認(rèn)版本,然后根據(jù)szVersion在確定的ProductID內(nèi)得到grayupdate配置的版本,如果沒有找到,就用默認(rèn)版本信息,將得到的數(shù)據(jù)都保存在item類,返回給客戶端。

    那思考之前的疑惑,解答如下:

  • 存在一個(gè)產(chǎn)品,有多個(gè)指定版本升級的情況,測試用例需要增加。
  • 運(yùn)營線是有14個(gè),但是根據(jù)程序內(nèi)部實(shí)現(xiàn)方法(容器循環(huán)控制找產(chǎn)品ID),是沒必要配置14個(gè)的,測試4個(gè),4個(gè)產(chǎn)品都能依次正常通過測試,就能保證14個(gè)沒問題。
  • 交互過程,接口輸入輸出已表明。
  • 等于的時(shí)候是什么情況,得與開發(fā)溝通。
  • ?修正測試點(diǎn)如下:

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/loleina/p/5091114.html

    總結(jié)

    以上是生活随笔為你收集整理的从代码里提取的测试需求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。