Передача аргументов командной строки в интеграционные тесты - PullRequest
0 голосов
/ 06 июня 2018

Я хотел бы передать аргумент командной строки, строку, представляющую адрес, в мои интеграционные тесты для моей службы на основе определения местоположения.Эти тесты вызываются из тестового прогона run_tests.py.

import argparse
import unittest

import mycity.test.integration_tests.test_snow_emergency_parking as snow_parking
import mycity.test.integration_tests.test_trash_intent as trash_intent
import mycity.test.integration_tests.test_unhandled_intent as unhandled_intent
import mycity.test.integration_tests.test_get_alerts as get_alerts
import mycity.test.unit_tests.test_finder_csv as finder_csv
import mycity.test.unit_tests.test_mycity_controller as my_controller
import mycity.test.unit_tests.test_address_utils as address_utils
import mycity.test.unit_tests.test_google_maps_utils as g_maps_utils
import mycity.test.unit_tests.test_csv_utils as csv_utils
import mycity.test.unit_tests.test_gis_utils as gis_utils


TEST_CASES = [  my_controller.MyCityControllerUnitTestCase,
                g_maps_utils.TestGoogleMapsUtilities,
                address_utils.AddressUtilitiesTestCase,
                csv_utils.CSVUtilitiesTestCase,
                gis_utils.GISUtilitiesTestCase,
                finder_csv.FinderCSVTestCase,
                get_alerts.GetAlertsTestCase,
                trash_intent.TrashDayTestCase,
                unhandled_intent.UnhandledIntentTestCase,
                snow_parking.SnowEmergencyTestCase
                ]

def load_tests():
    suite = unittest.TestSuite()
    loader = unittest.TestLoader()
    for test_case in TEST_CASES:
        suite.addTests(loader.loadTestsFromTestCase(test_case))
    return suite


if __name__ == "__main__":
    test_suite = load_tests()
    runner = unittest.TextTestRunner()
    runner.run(test_suite)

Вот базовый класс, который мой подкласс тестов интеграции.Прямо сейчас я жестко закодировал адрес.Я хотел бы присвоить аргумент cmd-line для self.request._session_attributes[key].

import unittest
import unittest.mock as mock

import mycity.intents.intent_constants as intent_constants
import mycity.mycity_controller as my_controller
import mycity.mycity_request_data_model as req
import mycity.test.test_constants as test_constants




###############################################################################
# TestCase parent class for all intent TestCases, which are integration tests #
# to see if any changes in codebase have broken response-request model.       #
#                                                                             #
# NOTE: Assumes that address has already been set.                            #
###############################################################################

class IntentBaseCase(unittest.TestCase):

    intent_to_test = None
    returns_reprompt_text = False

    def setUp(self):
        self.controller = my_controller
        self.request = req.MyCityRequestDataModel()
        key = intent_constants.CURRENT_ADDRESS_KEY
        self.request._session_attributes[key] = "1000 Dorchester Ave"
        self.request.intent_name = self.intent_to_test

    def tearDown(self):
        self.controller = None
        self.request = None

1 Ответ

0 голосов
/ 06 июня 2018

Вам понадобится анализатор аргументов

Вот краткий пример:

import argparse


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='integration tests')
    parser.add_argument('--address', help='address', required=True,
                        help="address as string")


    args = parser.parse_args()
    address = args.address

Не стесняйтесь взглянуть на документацию argparse (Python 3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...