简体   繁体   中英

How do I insert a command argument into a string?

I'm trying to figure out how to send a command line argument into a string, and I keep getting an error.

Here is my python code with the command argument

import sys
class LoginTest(unittest.TestCase):
    def setUp(self):
        buildURL = sys.argv[1]
        self.driver = webdriver.Chrome()
        self.driver.get("https://" + buildURL + "test.com")

Here is the command line argument I send.

python test.py build190 

And lastly the error I keep getting.

AttributeError: 'module' object has no attribute 'build190'

The full error message I receive

Traceback (most recent call last):
  File "Test.py", line 60, in <module>
    unittest.main()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 94, in __init__
    self.parseArgs(argv)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 149, in parseArgs
    self.createTests()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.py", line 158, in createTests
    self.module)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 130, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'build190'

You are trying to run unittest and how it loads is interfering with your intention to pass argument to a script.

Before we go further, unit tests should run as standalone and passing parameters to them is not a best practice. Here you can read reasons why not to do it.

Anyway, try this snippet. It should work.

import sys
import unittest

class LoginTest(unittest.TestCase):
    buildURL = ""

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://" + buildURL + "test.com")

if __name__ == "__main__":
    LoginTest.buildURL = sys.argv[1]
    unittest.main()

If you decide to go this path (passing parameter to a unit test), you should add some checking if there is any argument at all, and if you want to run with buildURL that is not set.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM