Python3 bruker HTMLTestRunner.py for å rapportere ImportError: Ingen modul kalt 'StringIO'

Python3 Uses Htmltestrunner



Python3 bruker HTMLTestRunner.py for å rapportere ImportError: Ingen modul med navnet 'StringIO' løsning:

1. Årsaken er at det offisielle nettstedet er skrevet i python2-syntaks. Den offisielle endret manuelt HTMLTestRunner.py på det offisielle nettstedet til syntaksen til python3:



referanse: http://bbs.chinaunix.net/thread-4154743-1-1.html



nedlastningskobling: http://tungwaiyip.info/software/HTMLTestRunner.html



Endret nedlastningsadresse: http://pan.baidu.com/s/1dEZQ0pz (lat nedlasting direkte)

2. Modifikasjonsoppsummering:

Linje 94, endre import StringIO til import io



På linje 539 endrer du self.outputBuffer = StringIO.StringIO () til self.outputBuffer = io.StringIO ()

På linje 642, endre hvis ikke rmap.has_key (cls): til hvis ikke cls i rmap:

Linje 766, endre uo = o. Dekode ('latin-1') til uo = e

Linje 775, endre ue = e.decode ('latin-1') til ue = e

På linje 631, endre utskrift >> sys.stderr, ' nTid forløpt:% s'% (self.stopTime-self.startTime) for å skrive ut (sys.stderr, ' nTid forløpt:% s'% (selv. StopTime -self.startTime))

Ved å bruke HTMLTestRunner under Python 3.4, i begynnelsen, ble HTMLTestRunner-modulen introdusert for å rapportere en feil.

1

I de 94 linjene i HTMLTestRunner brukes StringIO, men i Python 3 er det ingen StringIO. I stedet er det io.StringIO. Så endre denne linjen for å importere io

to

I linje 539 i HTMLTestRunner er self.outputBuffer = StringIO.StringIO () endret til self.outputBuffer = io.StringIO ()

3

Etter endringen ble modulen vellykket introdusert.

4

Utfør skriptkoden:

bilde
# -*- coding: utf-8 -*- #Introduction of the packages required by webdriver and unittest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException import unittest, time, re # HTMLTestRunner package import HTMLTestRunner class Baidu(unittest.TestCase): # def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = 'http://www.baidu.com/' self.verificationErrors = [] self.accept_next_alert = True # def test_baidu(self): driver = self.driver driver.get(self.base_url) driver.find_element_by_id('kw').click() driver.find_element_by_id('kw').clear() driver.find_element_by_id('kw').send_keys('Selenium Webdriver') driver.find_element_by_id('su').click() time.sleep(2) driver.close() def tearDown(self): self.driver.quit() self.assertEqual([], self.verificationErrors) if __name__ == '__main__': # define a test container test = unittest.TestSuite() #Add test cases to the test container test.addTest(Baidu('test_baidu')) # Define a report storage path, support relative path file_path = 'F:\RobotTest\result.html' file_result= open(file_path, 'wb') # Runner = HTMLTestRunner.HTMLTestRunner(stream = file_result, title = u' Baidu search test report', description = u 'use case execution') #Run test case runner.run(test) file_result.close()
bilde

Etter å ha kjørt testskriptet, fant jeg en feil:

Fil 'C: Python34 lib HTMLTestRunner.py', linje 642, i sortResult

hvis ikke rmap.has_key (cls):

Så gå til linje 642 for å endre koden:

5

Fortsett å rapportere en feil etter kjøring:

AttributeError: 'str' objekt har ingen attributt 'decode'

Gå til linje 766, 772 og fortsett å endre (merk: 766 linjer er uo og 772 linjer er ue. På den tiden la jeg ikke merke til disse, jeg trodde det var det samme, noe som førte til noen uforklarlige feil, kastet for lenge):

6

Kjør etter endring, og fant en annen feil:

Fil 'C: Python34 lib HTMLTestRunner.py', linje 631, i løpet

skriv ut >> sys.stderr, ' nTid forløpt:% s'% (self.stopTime-self.startTime)

TypeError: ikke-støttede operand-typer for >>: 'innebygd_funksjon_eller_metode' og '_io.TextIOWrapper'

Gå til 631 for å se og finne den eneste utskriften i hele programmet:

skriv ut >> sys.stderr, ' nTid forløpt:% s'% (self.stopTime-self.startTime

Dette er 2.x måte å skrive på, vi endrer utskriften til 3.x, endrer som følger:

skriv ut (sys.stderr, ' nTid forløpt:% s'% (self.stopTime-self.startTime))

Gjengitt på: https://www.cnblogs.com/testyao/p/5658200.html