'module'对象没有属性'test one'

时间:2016-11-26 23:18:43

标签: python unit-testing attributeerror

为什么我的测试脚本会给我这个错误?这是我的代码:

# 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时,我收到此错误消息: enter image description here

我的测试脚本应该接收任意数量的字符串并发送到fill_web_form.py,这会将它们发布到我在127.0.0.1

系统上的网络表单中

但是我一直在犯这个错误AttributeError: module has no attribute 'testone'我没有得到它,我没有尝试访问具有属性'testone的模块,我只是试图将该字符串传递给fill_web_form.py

任何人都可以帮助我吗?

1 个答案:

答案 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])