I. 개요
이 블로그는, DDT 모듈, 파이썬과 셀레늄 프레임 워크 유닛 테스트를 기반으로, 자동화 된 테스트를하고 소개하는 테스트로 XML 입력 파일을 사용합니다.
둘째, XML 파일
D : \\ 프로그램 \\ 파이썬 \\ PythonUnittest \\ TestData 사용 \\ TestData.xml 경로를 저장
파일 이름 : TestData.xml
<? XML 버전 = "1.0"인코딩 = "UTF-8"?> <bookList 타입 = "기술"> <책> <이름> 셀레늄 XML datadriven </ 이름> <저작> davieyang </ 작성자> </ 책> <책> <이름> 셀레늄 엑셀 datadriven </ 이름> <작가> davieyang </ 저자> </ 책> <책> <이름> 셀레늄 DDT 데이터 목록 </ 이름> <작가> davieyang </ 저자> </ 책 > </ bookList>
셋째, 구문 분석 XML 파일
파일 경로 : 백분율 \ ParseXMLUtil
파일 이름 : ParseXMLUtil
. 인코딩 = UTF 8 # "" " __title__ = '' __author__ = 'davieyang' __mtime__ = '2018년 4월 21일' " "" ElementTree xml.etree 가져 오기에서 클래스 parseXML (객체) 는 def __init의 __ (자체, XMLPath) : = XMLPath self.xmlPath DEF getRoot (자동) : # 개방형 XML 파일을 구문 분석하는 나무 = ElementTree.parse (self.xmlPath) 다음 # XML 파일의 루트 객체를 얻고,이 호출자에게 반환 ) (tree.getroot에 대한 바로 가기를 반환 DEF findNodeByName을 (자기가 인 parentNode 노드 이름은) : # 노드 객체에 의해 노드의 이름을 얻을 노드 = parentNode.findall는 (여기서 nodeName)을 반환 노드 DEF getNodeofChildText (자체, 노드는) # 노드 키 값 사전 개체로 존재하는 노드의 조성 노드하에있는 모든 자식 노드들에 대한 노드의 이름을 취득 책 책 : = {i.tag childrenTextDict의리스트에 대한 I i.text (node.iter ()) [1.]} # 위의 코드에 해당 '' childrenTextDict = {} I에 대한 목록 (node.iter ()) [1] : fhildrenTextDict [i.tag] = i.text가 '' ' 돌아 childrenTextDict DEF getDataFromXml (자동) : #은 XML 문서의 루트 노드 객체를 얻을 루트 = self.getRoot () # 모든이라는 책의 루트에 도착 노드 객체 책 = self.findNodeByName (루트, "책") 데이터 목록 = [] # 모든 책 노드 객체 얻을 횡단 # 필요한 테스트 데이터를 달성 dataList.append (childrenText) childrenText = self.getNodeofChildText (책) 데이터 목록을 반환 하는 경우 __name__ == "__main__": XML = ParseXML (R "F : \ seleniumWithPython \ TestData 사용 \ TestData.xml") datas = xml.getDataFromXml () datas의 난에 대한 : 인쇄 ( I [ "이름", I [ "저자"])
넷째, 테스트 스크립트
파일의 이름은 할 수 있습니다 data_driven_by_xml.py
인코딩 = UTF. 8 # "" " __title__ = '' __author__ = 'davieyang' __mtime__ = '2018년 4월 21일' " "" webdriver 셀레늄 가져 오기에서 가져 오기 유닛 테스트 가져 오기 시간 가져 오기 로깅 가져 오기 역 추적 가져 오기 DDT Util.ParseXMLUtil 가져 오기 parseXML에서 가져 오기는 NoSuchElementException의 selenium.common.exceptions # 초기화 로그 오브젝트 logging.basicConfig ( # 로그 레벨 레벨 = logging.info, # 타임 코드 여기서 파일 이름, 라인 번호, 로그 레벨 로그 정보의 이름 형식 = '% (asctime과) S % (파일명) S [라인 % (LINENO) D] % (levelname)의 % (메시지)의 ' 타임 # 인쇄 로그 datefmt ='% A, %의 D %의 B %의 Y의 %의 H %의 M : %의 S ' # 로그 파일은 디렉토리에 저장하고 파일 이름을 기록하고 있습니다 파일 이름 = 'D : \\ 프로그램 \\ 파이썬 \\ PythonUnittest \\ 보고서 \\ TestResults.TestResults', #打开日志的方式 파일 모드 = 'w' ) # currentPath = os.path.dirname (os.path.abspath ( __file__)) # dataFilePath = os.path.join (currentPath "TestData.xml") dataFilePath = "E : \\数据驱动\\ TestData.xml" 인쇄 (dataFilePath) #创建ParseXML类实例对象 XML = ParseXML (dataFilePath ) @ ddt.ddt 클래스 DataDrivenTestByXML (unittest.TestCase) : 데프 설정 (자동) : self.driver = webdriver.Chrome (executable_path = R "F : \ 자동화 \ webdriver \ chromedriver.exe") @ ddt.data (* XML .getDataFromXml ()) 데프 test_dataDrivenByXML (자기, 데이터) : testdata로, expectData 데이터가 = [ "이름", 데이터 [ "저자"] URL = "http://www.baidu.com" self.driver.get (URL) self.driver.maximize_window () self.driver.implicitly_wait (10) 시도 : self.driver.find_element_by_id ( "kw")를 send_keys (testdata로). self.driver.find_element_by_id ( "SU")를 ()을 클릭합니다. time.sleep (3) self.driver에 (expectData self.assertTrue합니다. page_source) 는 NoSuchElementException 제외한 예로서 : logging.error (U "查找的页面元素不存在,异常堆栈信息为"+ STR (traceback.format_exc ())) AssertionError를 제외한 예로서 : logging.info (U "搜索'% 의 '期望'% s '이 (가),실패 "% (testdata로, expectData)) E 같은 예외를 제외 : logging.error (U "알 수없는 오류, 오류 메시지 :"+ STR (traceback.format_exc ())) 그렇지 않으면 : logging.info (를 통해 U '검색'% s '을 (를) 예상'% s '이 (가)는 " % (testdata로, expectData)) DEF의 tearDown (자동) : self.driver.quit () IF __name__ == "__main__": unittest.main ()
test_dataDrivenByXML