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)
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
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)
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.")
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
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