प्रौद्योगिकी साझेदारी

अन्तरफलकपरीक्षणं किम् अस्ति तथा च वयं अन्तरफलपरीक्षणं कथं कार्यान्वयामः?

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. अन्तरफलकपरीक्षणं किम् ?
यथा नाम सूचयति, अन्तरफलकपरीक्षणं प्रणालीनां अथवा घटकानां मध्ये अन्तरफलकस्य परीक्षणं भवति, मुख्यतया आँकडानां आदानप्रदानस्य, स्थानान्तरणस्य नियन्त्रणप्रबन्धनप्रक्रियाणां, परस्परतार्किकनिर्भरतायाः च सत्यापनार्थम् अन्तरफलकप्रोटोकॉल HTTP, WebService, Dubbo, Thrift, Socket इत्यादिषु प्रकारेषु विभक्ताः सन्ति परीक्षणप्रकाराः मुख्यतया कार्यात्मकपरीक्षणं, कार्यप्रदर्शनपरीक्षणं, स्थिरतापरीक्षणं, सुरक्षापरीक्षणम् इत्यादिषु विभक्ताः सन्ति ।

स्तरितपरीक्षणस्य "पिरामिड" प्रतिरूपे अन्तरफलकपरीक्षणं सेवाएकीकरणपरीक्षणस्य द्वितीयस्तरस्य अन्तर्भवति । UI स्तरस्य (मुख्यतया WEB अथवा APP) स्वचालितपरीक्षणस्य तुलने अन्तरफलकस्वचालितपरीक्षणस्य अधिकलाभाः सन्ति, कार्यान्वयनम् सुलभं भवति, अनुरक्षणव्ययः न्यूनः भवति, तथा च प्रत्येकस्य कम्पनीयाः कृते प्रथमः विकल्पः भवति स्वचालितपरीक्षणम्।

अधः वयं HTTP अन्तरफलकं उदाहरणरूपेण गृह्णामः यत् अन्तरफलकस्वचालनपरीक्षणप्रक्रियायाः पूर्णतया परिचयं प्राप्नुमः: आवश्यकताविश्लेषणात् उपयोगप्रकरणनिर्माणपर्यन्तं, स्क्रिप्टलेखनात्, परीक्षणनिष्पादनात् परिणामविश्लेषणपर्यन्तं, तथा च सम्पूर्णं उपयोगप्रकरणनिर्माणं परीक्षणलिपिः च प्रदामः

2. मूलभूतप्रक्रिया
मूलभूतं अन्तरफलककार्यं स्वचालितपरीक्षणप्रक्रिया निम्नलिखितरूपेण अस्ति ।

आवश्यकताविश्लेषणम्->प्रयोगप्रकरणनिर्माणम्->स्क्रिप्टविकासः->परीक्षणनिष्पादनम्->परिणामविश्लेषणम्

२.१ नमूना अन्तरफलकम्
अन्तरफलकस्य नाम : Douban movie search

अन्तरफलकदस्तावेजपता: https://developers.douban.com/wiki/?title=movie_v2#search

अन्तरफलक-आह्वानस्य उदाहरणम् : १.

१) कलाकारैः चालकदलेन च अन्वेषणं कुर्वन्तु: https://api.douban.com/v2/movie/search?q=Zhang Yimou

२) चलचित्रस्य शीर्षकेन अन्वेषणम् : https://api.douban.com/v2/movie/search?q=西游之西游

३) विधानुसारं अन्वेषणम् : https://api.douban.com/v2/movie/search?tag=comedy


3. आवश्यकता विश्लेषणम्
आवश्यकताविश्लेषणं आवश्यकताः, डिजाइनं च इत्यादीन् दस्तावेजान् निर्दिशति आवश्यकतानां अवगमनस्य आधारेण आन्तरिककार्यन्वयनतर्कस्य अवगमनम् अपि आवश्यकम् अस्ति, अस्मिन् स्तरे आवश्यकतानां, डिजाइनस्य च अयुक्ताः अथवा परित्यक्ताः पक्षाः सूचयितुं शक्यन्ते

यथा : Douban movie search interface, अहं यत् आवश्यकतां अवगच्छामि तत् अस्ति यत् चलचित्रशीर्षकाणां, कलाकारानां सदस्यानां, टैगस्य च अन्वेषणस्य समर्थनं करणीयम्, अन्वेषणपरिणामान् पृष्ठेषु प्रत्यागन्तुं च।

4. केस डिजाइनस्य उपयोगं कुर्वन्तु
उपयोगप्रकरणस्य डिजाइनं अन्तरफलकपरीक्षणस्य आवश्यकतां अवगन्तुं तथा परीक्षणप्रकरणस्य डिजाइनं लिखितुं MindManager अथवा XMind इत्यादीनां माइंडमैपिंगसॉफ्टवेयरस्य उपयोगेन आधारितं भवति मुख्यसामग्रीयां पैरामीटर् सत्यापनम्, कार्यसत्यापनं, व्यावसायिकपरिदृश्यसत्यापनं, सुरक्षा तथा कार्यप्रदर्शनसत्यापनम् इत्यादयः सन्ति उपयोगप्रकरणनिर्माणविधिषु समतुल्यतावर्गविभाजनं, सीमामूल्यविश्लेषणं, परिदृश्यविश्लेषणं, कारणप्रभावचित्रं, लंबवतसारणी इत्यादयः सन्ति ।

Douban movie search interface function test भागस्य कृते वयं मुख्यतया त्रयः पक्षाः केन्द्रीभवन्ति: पैरामीटर् सत्यापनम्, फंक्शन् सत्यापनम्, व्यावसायिकपरिदृश्यसत्यापनं च डिजाइनपरीक्षायाः उदाहरणानि निम्नलिखितरूपेण सन्ति ।

5. लिपिविकासः

उपरि लिखितस्य परीक्षणप्रकरणस्य डिजाइनस्य आधारेण वयं प्रासंगिकस्वचालितपरीक्षणलिप्याः लेखनार्थं python+nosetests framework इत्यस्य उपयोगं कृतवन्तः । एतत् अन्तरफलकस्वचालितपरीक्षणस्य, स्वचालितनिष्पादनस्य, परीक्षणप्रतिवेदनानां ईमेलप्रेषणस्य च कार्याणि पूर्णतया साक्षात्कर्तुं शक्नोति ।

५.१ सम्बन्धित lib संस्थापनम्

आवश्यकाः lib पुस्तकालयाः निम्नलिखितरूपेण सन्ति ।

  1. pip install nose
  2. pip install nose-html-reporting
  3. pip install requests

५.२ अन्तरफलक-आह्वानम्

अनुरोधपुस्तकालयस्य उपयोगेन वयं उपर्युक्तं interface calling विधिं सहजतया लिखितुं शक्नुमः (यथा q=Andy Lau इत्यस्य अन्वेषणं, नमूनासङ्केतः निम्नलिखितरूपेण अस्ति):

  1. #coding=utf-8
  2. import requests
  3. import json
  4. url = 'https://api.douban.com/v2/movie/search'
  5. params=dict(q=u'刘德华')
  6. r = requests.get(url, params=params)
  7. print 'Search Params:n', json.dumps(params, ensure_ascii=False)
  8. print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)

यदा वास्तवतः स्वचालितपरीक्षणलिप्याः लेखनं भवति तदा अस्माभिः किञ्चित् एन्कैप्सुलेशनं कर्तव्यम् । निम्नलिखित कोड् मध्ये, वयं Douban चलच्चित्र अन्वेषण अन्तरफलकं समाहितं कुर्मः test_q पद्धत्या केवलं nosetests द्वारा प्रदत्तस्य yield विधिस्य उपयोगः आवश्यकः भवति यत् सूची qs मध्ये प्रत्येकं परीक्षणं सेट् कृत्वा सुविधापूर्वकं लूप् कर्तुं शक्नोति ।

  1. class test_doubanSearch(object):
  2. @staticmethod
  3. def search(params, expectNum=None):
  4. url = 'https://api.douban.com/v2/movie/search'
  5. r = requests.get(url, params=params)
  6. print 'Search Params:n', json.dumps(params, ensure_ascii=False)
  7. print 'Search Response:n', json.dumps(r.json(), ensure_ascii=False, indent=4)
  8. def test_q(self):
  9. # 校验搜索条件 q
  10. qs = [u'白夜追凶', u'大话西游', u'周星驰', u'张艺谋', u'周星驰,吴孟达', u'张艺谋,巩俐', u'周星驰,大话西游', u'白夜追凶,潘粤明']
  11. for q in qs:
  12. params = dict(q=q)
  13. f = partial(test_doubanSearch.search, params)
  14. f.description = json.dumps(params, ensure_ascii=False).encode('utf-8')
  15. yield (f,)

वयं परीक्षणप्रकरणस्य डिजाइनस्य अनुसारं क्रमेण प्रत्येकस्य कार्यस्य स्वचालितपरीक्षालिपिः लिखितुं शक्नुमः ।

५.३ परिणामसत्यापनम्
अन्तरफलकस्य मैन्युअल् रूपेण परीक्षणं कुर्वन् अस्माभिः अन्तरफलकेन प्रत्यागतानां परिणामानां आधारेण परीक्षणं उत्तीर्णं भवति वा इति निर्णयः करणीयः ।

अस्य अन्तरफलकस्य कृते वयं "q=Andy Lau" इति अन्वेषणं कुर्मः तथा च अस्माभिः निर्धारयितुं आवश्यकं यत् प्रत्यागतेषु परिणामेषु "actor Andy Lau अथवा film title Andy Lau" इति अन्वेषणं कुर्वन्, अस्माभिः तस्य प्रकारः निर्धारितव्यः movie in the returned results. सम्पूर्णः परिणामसत्यापनसङ्केतः निम्नलिखितरूपेण अस्ति ।

  1. class check_response():
  2. @staticmethod
  3. def check_result(response, params, expectNum=None):
  4. # 由于搜索结果存在模糊匹配的情况,这里简单处理只校验第一个返回结果的正确性
  5. if expectNum is not None:
  6. # 期望结果数目不为None时,只判断返回结果数目
  7. eq_(expectNum, len(response['subjects']), '{0}!={1}'.format(expectNum, len(response['subjects'])))
  8. else:
  9. if not response['subjects']:
  10. # 结果为空,直接返回失败
  11. assert False
  12. else:
  13. # 结果不为空,校验第一个结果
  14. subject = response['subjects'][0]
  15. # 先校验搜索条件tag
  16. if params.get('tag'):
  17. for word in params['tag'].split(','):
  18. genres = subject['genres']
  19. ok_(word in genres, 'Check {0} failed!'.format(word.encode('utf-8')))
  20. # 再校验搜索条件q
  21. elif params.get('q'):
  22. # 依次判断片名,导演或演员中是否含有搜索词,任意一个含有则返回成功
  23. for word in params['q'].split(','):
  24. title = [subject['title']]
  25. casts = [i['name'] for i in subject['casts']]
  26. directors = [i['name'] for i in subject['directors']]
  27. total = title + casts + directors
  28. ok_(any(word.lower() in i.lower() for i in total),
  29. 'Check {0} failed!'.format(word.encode('utf-8')))
  30. @staticmethod
  31. def check_pageSize(response):
  32. # 判断分页结果数目是否正确
  33. count = response.get('count')
  34. start = response.get('start')
  35. total = response.get('total')
  36. diff = total - start
  37. if diff >= count:
  38. expectPageSize = count
  39. elif count > diff > 0:
  40. expectPageSize = diff
  41. else:
  42. expectPageSize = 0
  43. eq_(expectPageSize, len(response['subjects']), '{0}!={1}'.format(expectPageSize, len(response['subjects'])))

५.४ परीक्षणानां निष्पादनम्

उपरिष्टाद् परीक्षणस्क्रिप्ट् कृते वयं स्वचालितपरीक्षां सुलभतया चालयितुं nosetests आदेशस्य उपयोगं कर्तुं शक्नुमः, तथा च html प्रारूपपरीक्षाप्रतिवेदनानि जनयितुं nose-html-reporting प्लग-इन् इत्यस्य उपयोगं कर्तुं शक्नुमः ।

आदेशं यथा चालयन्तु ।

nosetests -v test_doubanSearch.py:test_doubanSearch --with-html --html-report=TestReport.html

५.५ ईमेल-रिपोर्ट् प्रेषयन्तु

परीक्षणस्य समाप्तेः अनन्तरं वयं html प्रारूपपरीक्षाप्रतिवेदनं प्रेषयितुं smtplib मॉड्यूल् द्वारा प्रदत्तां पद्धतिं उपयोक्तुं शक्नुमः । मूलभूतप्रक्रिया परीक्षणप्रतिवेदनं पठितुं -> ईमेल सामग्रीं संलग्नकञ्च योजयितुं -> मेलसर्वरेण सह सम्बद्धं कर्तुं -> ईमेलं प्रेषयितुं -> निर्गमनं कर्तुं नमूनासङ्केतः निम्नलिखितरूपेण अस्ति ।

  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.multipart import MIMEMultipart
  4. def send_mail():
  5. # 读取测试报告内容
  6. with open(report_file, 'r') as f:
  7. content = f.read().decode('utf-8')
  8. msg = MIMEMultipart('mixed')
  9. # 添加邮件内容
  10. msg_html = MIMEText(content, 'html', 'utf-8')
  11. msg.attach(msg_html)
  12. # 添加附件
  13. msg_attachment = MIMEText(content, 'html', 'utf-8')
  14. msg_attachment["Content-Disposition"] = 'attachment; filename="{0}"'.format(report_file)
  15. msg.attach(msg_attachment)
  16. msg['Subject'] = mail_subjet
  17. msg['From'] = mail_user
  18. msg['To'] = ';'.join(mail_to)
  19. try:
  20. # 连接邮件服务器
  21. s = smtplib.SMTP(mail_host, 25)
  22. # 登陆
  23. s.login(mail_user, mail_pwd)
  24. # 发送邮件
  25. s.sendmail(mail_user, mail_to, msg.as_string())
  26. # 退出
  27. s.quit()
  28. except Exception as e:
  29. print "Exceptioin ", e

6. परिणामविश्लेषणम्

नासिकापरीक्षाः चालितस्य अनन्तरं उत्पन्नं परीक्षणप्रतिवेदनं उद्घाटयन्तु एतत् द्रष्टुं शक्यते यत् अस्मिन् परीक्षणे कुलम् ५१ परीक्षणप्रकरणाः निष्पादिताः, येषु ५० सफलाः अभवन्, येषु एकः असफलः अभवत् ।

असफलप्रयोगप्रसङ्गे, भवान् द्रष्टुं शक्नोति यत् पारितानि मापदण्डानि सन्ति: {"count": -10, "tag": "Comedy"}, अस्मिन् समये प्रत्यागतानां परिणामानां संख्या अस्माकं अपेक्षितपरिणामानां (कदा count एकः ऋणात्मकः सङ्ख्या अस्ति, अपेक्षितः परिणामः अस्ति अन्तरफलकं त्रुटिं प्रतिवेदयति अथवा 20 इत्यस्य पूर्वनिर्धारितमूल्यं उपयुङ्क्ते, परन्तु प्रत्यागतानां परिणामानां वास्तविकसङ्ख्या 189 अस्ति।

7. सम्पूर्ण लिपि
मया Douban movie search interface इत्यस्य सम्पूर्णं स्वचालितं परीक्षणलिपिं GitHub इत्यत्र अपलोड् कृतम् अस्ति । पतां डाउनलोड् कुर्वन्तु: test_demo/test_douban at master · lovesoo/test_demo · GitHub इत्यत्र

डाउनलोड् समाप्तस्य अनन्तरं सम्पूर्णं अन्तरफलकस्वचालनपरीक्षणं कर्तुं तथा च ईमेलद्वारा अन्तिमपरीक्षाप्रतिवेदनं प्रेषयितुं निम्नलिखितआदेशस्य उपयोगं कुर्वन्तु:

पायथन test_doubanSearch.py
अन्ते test report email प्रेषयन्तु, स्क्रीनशॉट् निम्नलिखितरूपेण अस्ति

अन्ते मम लेखं सम्यक् पठन्तः सर्वेभ्यः धन्यवादं दातुम् इच्छामि यद्यपि अतीव मूल्यवान् वस्तु नास्ति तथापि यदि भवान् तस्य उपयोगं कर्तुं शक्नोति तर्हि प्रत्यक्षतया ग्रहीतुं शक्नोति।

इयं सूचना [सॉफ्टवेयरपरीक्षण] मित्राणां कृते सर्वाधिकं व्यापकं पूर्णं च सज्जतागोदामं भवितुमर्हति अयं गोदामः अपि दशसहस्राणि परीक्षण-इञ्जिनीयराणां सह कठिनतमयात्रायाः माध्यमेन गतः इति आशासे।