Пример #1
0
 def test_open_good_page(self):
     """
     Title: Открыть все товары.
     """
     do_time = time.time()
     count = 0   # счетчик обработкти товаров
     goods_not_opened = list()
     criteria = "'PUBLISHED'"   # товары только активные и неактивные
     statuses_id = databases.db7.accounting.get_stock_state_id_by_name(criteria)
     stat = ','.join([str(i['id']) for i in statuses_id])
     goods = databases.db7.accounting.get_all_goods_psql("stock_state_id in (%s)" % stat)  # получить все товары из БД
     goods_count = len(goods)    # количество товаров из БД
     service_log.put("Количество товаров %s" % goods_count)
     print("Count goods %s" % goods_count)
     service_log.put("Начало обработки товаров...")
     print("Start reading goods...")
     # В цикле происходит обход всех страниц товаров
     for good in goods:
         count += 1
         good_url = self.ENV_BASE_URL + self.path_good.URL_GOOD % good['ware_id']
         self.get_page(self.driver, self.path_good.URL_GOOD % good['ware_id'])
         try:
             good_name_db = good['content']['title']['value'].replace('\n', ' ')
             good_list = good_name_db.split(' ')
             # убираем из названия товара двойные ит.д. пробелы
             good_name = ' '.join([i for i in good_list if i != ''])
         except Exception:
             good_name = None
             service_log.warning("У товара %s нет названия" % good_url)
             print("WARNING: Good %s is not Title" % good_url)
         xpath_good = self.check_good.TITLE_WARE
         try:
             obj = self.find_element_by_xpath_fast(self.driver, xpath_good)
             service_log.put("Success! Element by xpath=%s is found." % xpath_good)
             self.assertIn(obj.text, good_name)
         except Exception:
             goods_not_opened.append(good_url)
             service_log.warning("Страница товара %s не открылась" % good_url)
             print("WARNING: Good page %s not opened" % good_url)
         if count % 100 == 0 or count == goods_count:
             service_log.put("Обработано %s товаров" % count)
             print("Reading %s goods" % count)
     work_time = self.work_time(do_time)
     service_log.put("Время работы [%s]" % work_time)
     service_log.put("Обработка товаров завершена.")
     print("Finish reading goods.")
     service_log.put("Товары не открылись:\n%s" % goods_not_opened)
     print("Warning goods:\n%s" % goods_not_opened)
Пример #2
0
 def kill_android_emulator(self, name="emulator-x86.exe"):
     """ Убить процесс отвечающий за Android эмулятор. """
     service_log.put("Initiated close process the Android emulator...\n")
     result = self.find_process_by_name(name)
     if not result:
         service_log.warning("Process Android emulator not found!\n")
         return False
     cmd_work.kill_pid(result[0]["pid"])
     flag = int(time.time())
     while bool(self.find_process_by_name(name)):
         # ждем 5 минут до завршения работы эмулятора
         if flag + (60*5) > int(time.time()):
             service_log.warning("Close process the Android emulator - Fail!\n")
             return False
         else:
             time.sleep(5)
     service_log.put("Close process the Android emulator - success.\n")
     return True
Пример #3
0
 def test_open_category_page(self):
     """
     Title: Открыть все видимые категории.
     :return:
     """
     do_time = time.time()
     # xpath для раздела идля категории различается
     l = lambda x: self.check_catalog.PARENT_CATEGORY_ABSTRACT_BY_NAME if x['parent_id'] == 1 else \
         self.check_catalog.CATEGORY_ABSTRACT_BY_NAME
     count = 0   # счетчик обработкти категорий
     category_not_opened = list()
     parent_categories = databases.db3.accounting.get_parent_categories_visible()
     pc_str = ','.join([str(i['id']) for i in parent_categories if i['id'] != 0])
     criteria = "parent_id in (%s)" % pc_str  # видимые категории на сайте
     categories = databases.db3.accounting.get_categories_psql(criteria)   # получить категории из БД
     categories_count = len(categories)    # количество категорий из БД
     service_log.put("Количество категорий %s" % categories_count)
     print("Count categories %s" % categories_count)
     service_log.put("Начало обработки категорий...")
     print("Start reading categories...")
     # В цикле происходит обход всех страниц категорий
     for category in categories:
         count += 1
         category_url = self.ENV_BASE_URL + self.path_category.URL_PATH_ROOT_CATEGORY % category['id']
         self.get_page(self.driver, self.path_category.URL_PATH_ROOT_CATEGORY % category['id'])
         category_name = databases.db8.accounting.get_category_name(category['id'])[0]
         xpath_category = l(category) % category_name['value']
         try:
             self.find_element_by_xpath_fast(self.driver, xpath_category)
             service_log.put("Success! Element by xpath=%s is found." % xpath_category)
         except Exception:
             category_not_opened.append(category_url)
             service_log.warning("Страница категории %s не открылась" % category_url)
             print("WARNING: Category page %s not opened" % category_url)
         if count % 100 == 0 or count == categories_count:
             service_log.put("Обработано %s категорий" % count)
             print("Reading %s categories" % count)
     work_time = self.work_time(do_time)
     service_log.put("Время работы [%s]" % work_time)
     service_log.put("Обработка категорий завершена.")
     print("Finish reading categories.")
     service_log.put("Категории не открылись:\n%s" % category_not_opened)
     print("Warning categories:\n%s" % category_not_opened)
Пример #4
0
 def check_message(self, driver, dialog, message, link_db_ware, link_db_user, msg_info, read_time, user_id):
     """
     Проверить сообщение. Здесь определяется тип полученного сообщения, в зависимости от типа сообщения. Применяется
     соответствующая модель проверки.
     :param driver: вебдрайвер
     :param dialog: идентификатор диалога
     :param message: идентификатор сообщения
     :param link_db_ware: ссылка на БД товаров
     :param link_db_user: ссылка на БД пользователей
     :param msg_info: информация об отправителе
     :param read_time: информация о времени прочтения сообщения
     """
     self.check_message_info(driver, user_id, link_db_user, msg_info, read_time)
     type_message = message[u'contentType']
     if type_message == u'TEXT':
         self.check_text_message(driver, dialog, message)
     elif type_message == u'WARE':
         self.check_ware_message(driver, dialog, message, link_db_ware)
     elif type_message == u'PICTURE':
         self.check_picture_message(driver, dialog, message)
     elif type_message == u'USER':
         self.check_user_message(driver, dialog, message, link_db_user)
     else:
         service_log.warning("Undefined scheme checking message.")
Пример #5
0
    def StartServer(self, host='localhost', port=83, response=None):
        """ Веб-сервера для автотестов.
        Сервер работает в отдельном потоке.
        Информацию предоставляет через глоб.переменную info_requests.
        :param host: ip адрес
        :param port: номер порта
        :param response: response server
        :return: ничего или вызываем exception
        """
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server.bind((host, port))
        print "port %s opened" % port
        start_timer = None
        try:
            while self.stop_server is False:
                server.settimeout(float(self.timeout_server))  # Таймаут для прослушки порта
                server.listen(int(self.count_connect))     # Случшаем порт
                service_log.put("Socket open!")
                sock, user = server.accept()
                service_log.put("Server accept")
                service_log.put("Server socket: %s" % str(sock))
                service_log.put("Server user: %s" % str(user))
                service_log.warning("A non-blocking socket operation...")

                # A non-blocking socket operation could not be completed immediately
                time.sleep(1)

                # точка для дополнительного прерывания
                start_timer = int(time.time())

                data = sock.recv(1024).split("\r\n")        # считываем запрос и бьём на строки

                service_log.put("Request data: %s" % data)
                method, url, proto = data[0].split(" ", 2)  # обрабатываем первую строку
                headers = {}
                pos = None
                for pos, line in enumerate(data[1:]):  # проходим по строкам и заодно запоминаем позицию
                    if not line.strip():               # пустая строка = конец заголовков, начало тела**
                        break
                    key, value = line.split(": ", 1)   # разбираем строку с заголовком
                    headers = value.lower()            # приводим ключ к "нормальному", регистронезависимому виду

                # готовим инфу по тому ответу, которую получили с порта
                info_req = {'host': host, 'port': port,
                            'method': method, 'url': url, 'proto': proto,
                            'body': data[pos+2]}
                service_log.put("Add request: %s" % info_req)
                self.info_requests.append(info_req)
                self.info_requests = self.info_requests

                # Ответ сервера
                sock.send("HTTP/1.0 200 OK\r\n")           # мы не умеем никаких фишечек версии 1.1,поэтому будем честны
                sock.send("Server: OwnHands/0.1\r\n")      # Заголовки
                sock.send("Content-Type: text/plain\r\n")  # разметка тут пока не нужна, показываем всё как есть
                sock.send("\r\n")                          # Кончились заголовки, всё остальное - тело ответа
                if response is None:
                    sock.send("Wake up, Neo…\nThe Matrix has you…\nFollow the white rabbit.\nKnock, knock, Neo.\n")
                    service_log.put("Matrix Response server done.")
                else:
                    # TODO: передавать в качестве response ссылку на метод, который
                    # todo: обрабатывает serv.info_requests и на основе него выдаёт ответ
                    service_log.put("Response server done.")
                    sock.send(response)

                service_log.put("Close socket..")
                sock.close()  # TODO: не закрывать порт, пока не получимм все пакеты
                service_log.put("Socket closed!")

                # прерывание цикла
                if int(time.time()) - start_timer > self.timeout_server:
                    service_log.error("The server timeout is exhausted!")
                    self.info_requests.append({"Error": "The server timeout is exhausted"})
                    break

        except socket.timeout:
            msg = 'Socket timeout is limited, timeout=%s sec.'
            service_log.put(msg)
            self.info_requests.append({'Disconnect': msg % self.timeout_server})
            self.info_requests = self.info_requests
        except Exception, tx:
            service_log.put(str(tx))
            self.info_requests.append({'Error': str(tx)})
            self.info_requests = self.info_requests
Пример #6
0
    def StartServer(self, host='localhost', port=83, response=None):
        """ Веб-сервера для автотестов.
        Сервер работает в отдельном потоке.
        Информацию предоставляет через глоб.переменную info_requests.
        :param host: ip адрес
        :param port: номер порта
        :param response: response server
        :return: ничего или вызываем exception
        """
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server.bind((host, port))
        print "port %s opened" % port
        start_timer = None
        try:
            while self.stop_server is False:
                server.settimeout(float(
                    self.timeout_server))  # Таймаут для прослушки порта
                server.listen(int(self.count_connect))  # Случшаем порт
                service_log.put("Socket open!")
                sock, user = server.accept()
                service_log.put("Server accept")
                service_log.put("Server socket: %s" % str(sock))
                service_log.put("Server user: %s" % str(user))
                service_log.warning("A non-blocking socket operation...")

                # A non-blocking socket operation could not be completed immediately
                time.sleep(1)

                # точка для дополнительного прерывания
                start_timer = int(time.time())

                data = sock.recv(1024).split(
                    "\r\n")  # считываем запрос и бьём на строки

                service_log.put("Request data: %s" % data)
                method, url, proto = data[0].split(
                    " ", 2)  # обрабатываем первую строку
                headers = {}
                pos = None
                for pos, line in enumerate(
                        data[1:]
                ):  # проходим по строкам и заодно запоминаем позицию
                    if not line.strip(
                    ):  # пустая строка = конец заголовков, начало тела**
                        break
                    key, value = line.split(": ",
                                            1)  # разбираем строку с заголовком
                    headers = value.lower(
                    )  # приводим ключ к "нормальному", регистронезависимому виду

                # готовим инфу по тому ответу, которую получили с порта
                info_req = {
                    'host': host,
                    'port': port,
                    'method': method,
                    'url': url,
                    'proto': proto,
                    'body': data[pos + 2]
                }
                service_log.put("Add request: %s" % info_req)
                self.info_requests.append(info_req)
                self.info_requests = self.info_requests

                # Ответ сервера
                sock.send(
                    "HTTP/1.0 200 OK\r\n"
                )  # мы не умеем никаких фишечек версии 1.1,поэтому будем честны
                sock.send("Server: OwnHands/0.1\r\n")  # Заголовки
                sock.send(
                    "Content-Type: text/plain\r\n"
                )  # разметка тут пока не нужна, показываем всё как есть
                sock.send(
                    "\r\n")  # Кончились заголовки, всё остальное - тело ответа
                if response is None:
                    sock.send(
                        "Wake up, Neo…\nThe Matrix has you…\nFollow the white rabbit.\nKnock, knock, Neo.\n"
                    )
                    service_log.put("Matrix Response server done.")
                else:
                    # TODO: передавать в качестве response ссылку на метод, который
                    # todo: обрабатывает serv.info_requests и на основе него выдаёт ответ
                    service_log.put("Response server done.")
                    sock.send(response)

                service_log.put("Close socket..")
                sock.close(
                )  # TODO: не закрывать порт, пока не получимм все пакеты
                service_log.put("Socket closed!")

                # прерывание цикла
                if int(time.time()) - start_timer > self.timeout_server:
                    service_log.error("The server timeout is exhausted!")
                    self.info_requests.append(
                        {"Error": "The server timeout is exhausted"})
                    break

        except socket.timeout:
            msg = 'Socket timeout is limited, timeout=%s sec.'
            service_log.put(msg)
            self.info_requests.append(
                {'Disconnect': msg % self.timeout_server})
            self.info_requests = self.info_requests
        except Exception, tx:
            service_log.put(str(tx))
            self.info_requests.append({'Error': str(tx)})
            self.info_requests = self.info_requests