为什么我的测试脚本会给我这个错误?这是我的代码:
# fill_web_form_test.py
# import statements
import unittest
import fill_web_form
import sqlite3
import sys
form = 'test'
form_name = 'test_form'
if(len(sys.argv) < 2):
raise RuntimeError('invalid number of arguments, please enter at least one arguement to be \
test fill_web_form.py')
for arg in sys.argv:
if(not isinstance(arg, str)):
raise RuntimeError('All arguments must be strings')
# these test strings will be entered by the user as the first parameter
# it will be submited to the webpage to test fill_web_form.py
data = sys.argv[1:len(sys.argv)]
print "data = " + ', '.join(data)
class KnownValues(unittest.TestCase):
def test_fill_form(self):
# connect to sample database
print 'connecting to database'
conn = sqlite3.connect('FlaskApp\FlaskApp\sample.db')
conn.text_factory = str
# clear database table
print "clearing database"
cursor = conn.cursor()
cursor.execute("DROP TABLE if exists test_table")
cursor.execute("CREATE TABLE if not exists test_table(test_column)")
conn.commit()
# run function
print "running fill_web_form.py"
for data_entry in data:
fill_web_form.fill_form("http://127.0.0.1:5000", form, form_name, data_entry)
# get results of function from database
print "fetching results of fill_web_form.py"
cursor = conn.execute("SELECT * FROM test_table")
result = cursor.fetchall()[0]
print "Database contains strings: " + result
expected = data
# check for expected output
print "checking if output is correct"
self.assertEquals(expected, result)
# Run tests
if __name__ == '__main__':
unittest.main()
以下是fill_web_form.py的代码,它正在测试的脚本
# fill_web_form.py
import mechanize
def fill_form(url, form, form_name, data):
print "opening browser"
br = mechanize.Browser()
print "opening url...please wait"
br.open(url)
print br.title()
print "selecting form"
br.select_form(name=form)
print "entering string:'" + data +"' into form"
br[form_name] = data
print "submitting form"
br.submit()
当我在python fill_web_form_test.py "testone" "testtwo" "testthree"
中运行cmd
时,我收到此错误消息:
我的测试脚本应该接收任意数量的字符串并发送到fill_web_form.py
,这会将它们发布到我在127.0.0.1
但是我一直在犯这个错误AttributeError: module has no attribute 'testone'
我没有得到它,我没有尝试访问具有属性'testone的模块,我只是试图将该字符串传递给fill_web_form.py
任何人都可以帮助我吗?
答案 0 :(得分:1)
不要忘记unittest.main
接受命令行参数。尝试:
>fill_web_form_test.py -h
Usage: fill_web_form_test.py [options] [test] [...]
Options:
-h, --help Show this message
-v, --verbose Verbose output
-q, --quiet Minimal output
-f, --failfast Stop on first failure
-c, --catch Catch control-C and display results
-b, --buffer Buffer stdout and stderr during test runs
Examples:
fill_web_form_test.py - run default set of tests
fill_web_form_test.py MyTestSuite - run suite 'MyTestSuite'
fill_web_form_test.py MyTestCase.testSomething - run MyTestCase.testSomething
fill_web_form_test.py MyTestCase - run all 'test*' test methods
in MyTestCase
所以你的命令行参数"testone" "testtwo" "testthree"
也被unittest.main
解释为不存在的测试用例的名称
在fill_web_form_test.py
要解决此问题,请指定argv,如下所示:
if __name__ == '__main__':
unittest.main(argv=sys.argv[:1])