Ответы пользователя по тегу Python
  • Как развить в себе аналитические способности и математическое мышление?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Математика не поможет научиться программировать. Но освоив такие понятия как функция, выражение, переменная, в математическом плане станет легче осваивать материал по программированию. Нужно понять что вызов функции эквивалентен ее значению. Попробуйте сразу в питоне освоить lambda, filter, map, reduce вдруг пробьет. Но не огорчайтесь если сперва покажется трудным. Нужно пересилить свой мозг.
    Ответ написан
    Комментировать
  • Подойдёт ли Python для взломов?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Абсолютно согласен с тем чго сказал Saboteur Нужно к примеру понимать как устроен почтовый сервер и сервис, причем на таком уровне чтобы вы могли сами написать свой почтовый сервер. По аналогии слесарь автомеханик: один может машину починить заменив детали, а другой может собрать автомобиль от гайки и выточить детали сам и оно будет ездить. Нужно именно такое понимание предмета. Это уровень гуру. Не хочется Вас огорчать но думаю на это нужно лет десять.
    Хотя наверно можно и каких нибудь готовых мулек и скриптиков нарыть. Для этого конечно больших знаний не нужно. Но там и программировать не нужно.
    Ответ написан
    Комментировать
  • Как в python установить взаимодействие с ОС?

    lxsmkv
    @lxsmkv
    Test automation engineer
    если сам диалог загрузки не является предметом теста, то тут нужно максимально стараться обойтись без заморочек свазаных с ним. Т.е. применить решение предложеное выше - прямая загрузка в обход диалога.
    Ответ написан
    Комментировать
  • На чем писать сервер чтобы усложнить декомпиляцию?

    lxsmkv
    @lxsmkv
    Test automation engineer
    мне кажется, что нет такого компилята который нельзя было бы расколдовать в исходый вид. можно выдавать лицензию под имя пользователя, на основе имени пользователя генерировать файл-лицензию (простыня шифрованых букв). Клинет сверяет данные на основе файла-лицензии и или запускается либо нет. А иметь пользователей с одинаковым именем в сети по-моему винда не разрешает.
    Ответ написан
  • Получить total_page при парсинге?

    lxsmkv
    @lxsmkv
    Test automation engineer
    в худшем случае подбором. Как в игре угадай число. Если вы загадываете число меньше чем номер конечной страницы - страница есть, если вы берете число больше чем конечная страница - такой страницы нет.
    Ответ написан
    2 комментария
  • Как проверить наличие файла в указанной деректории?

    lxsmkv
    @lxsmkv
    Test automation engineer
    import os.path
    >>> print os.path.isfile("/etc/password.txt")
    True
    >>> print os.path.isfile("/etc")
    False
    >>> print os.path.exists("/etc/password.txt")
    True
    >>> print os.path.exists("/etc")
    True

    ссылка на Stackoverflow
    Ответ написан
    6 комментариев
  • Как грамотно сделать page object + pytest, чтобы не передавать фикстуру в каждый page класс?

    lxsmkv
    @lxsmkv
    Test automation engineer
    у нас тоже так, только обьект называется не app , а root. Правда мы тестируем embedded системы через GUI.
    if root is None:
    root = testcore.createRoot(); #ядро фреймворка выдает нам этот обьект
    и все функции тестового фреймворка требуют этого объекта. У меня каждый page-класс имеет self.root ссылку создаваемую в конструкторе и везде где надо при использовании фреймворка я её передаю.
    tst.press_and_release_button(self.root, buttonname='Button1') # tst тут ссылка на фреймворк.
    Т.е я так понимаю у нас сделали пользовательскую обертку воркуг ядра, а у вас напрямую.
    Я этот фреймворк не писал, а писал паренъ который и интерпретатор питона на яве для нашей системы написал, потому что jython сильно много памяти ест. И я верю в то, что если оно так, то так надо :) А я только пользуюсь всем этим добром, но вполне себе подход нормальный.
    На этот объект можно еще переменных навесить и передавать данные из одного места в другое.
    Ответ написан
    Комментировать
  • Есть ли хороший пример page object pattern на python?

    lxsmkv
    @lxsmkv
    Test automation engineer
    у нас свой фреймворк, мы делаем end-to-end тестирование embedded системы через GUI.
    я не выношу локаторы, они прописаны в классе в функциях.
    Некоторые у нас выносят в локаторы в отдельные файлы. Можно и так, однако я не вижу преимущества.
    Так я точно знаю какие локаторы относятся к какой странице. Начала вылетать функция, поправил локатор, не стало страницы, выкинул, поправил последовательность в тесте. Старые локаторы "автоматически" удаляются вместе со старыми page-объектами.
    В нашем случае нам не приходится ссылатъся на один и тот же элемент в рамках разных страниц, потому что у нас дерево виджетов построено от страницы, и даже если виджеты одинаково называются это совершенно разные обьекты. В веб-тестировании, однако, это не так, поэтому аргумент резонный.
    tf тут это ссылка на тест-фреймворк, который дает нам базовые функции для взаимодействия с GUI.
    class LoginView:
    	def __init__(self):
    	  self.viewname='ABC'
    	def enter(self):
    	  tf.executeApiCall()
    	def wait_for_view(self):
    		tf.wait_for_view(self.viewname)
    	def press_cancel_button(self):
    		tf.press_widget('xyz.ABC')
    	def enter_username(self, u):
    		tf.enter_string('xyz.ABC.inputfield', u)
    	def check_error_popup_visible(self,expect):
    		if expect==True:
    			tf.wait_for_view(view='xyz.ABC.LoginErrorPopup')
    		else:
    	 		tf.wait_for_view(notinview='xyz.ABC.LoginErrorPopup')
    	def press_login_button(self):
    		tf.press_widget('xyz.ABC.Login')

    на стороне теста выглядит как-то так
    username='Kolya'
    main_view = MainView()
    login_view = LoginView()
    login_view.enter()
    login_view.wait_for_view()
    login_view.enter_username(u=username)
    login_view.press_login_button()
    login_view.check_error_popup_visible(expect=True)
    login_view.confirm_error_popup()
    login_view.check_error_popup_visible(expect=False)
    login_view.check_inputfield_text_equals(expect=username)
    login_view.leave()
    main_view.wait_for_view()
    Ответ написан
    Комментировать
  • Вопрос по алгоритму в списке?

    lxsmkv
    @lxsmkv
    Test automation engineer
    a = [12,35,49]
    bracket = 3;
    result = []
    for x in a:
    	for i in range(-bracket,bracket+1):
    		result.append(x+i);
    print result

    [9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 46, 47, 48, 49, 50, 51, 52]

    а можно и так
    items = [12,35,49]
    bracket = 3
    result = sum(list(map(lambda x: range(x-bracket,x+bracket+1), items)),[])
    print result

    [9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 46, 47, 48, 49, 50, 51, 52]
    Ответ написан
    7 комментариев
  • Как найти конкретное слово в строке и удалить его на python?

    lxsmkv
    @lxsmkv
    Test automation engineer
    import string
    str1 = "String replace test"
    str1 = string.replace(str1,"epl", "")
    print str1

    String race test
    Ответ написан
    Комментировать
  • Как запускать скрипт с параметрами через консоль?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Комментировать
  • Пути создания виртуального тренажера?

    lxsmkv
    @lxsmkv
    Test automation engineer
    Принцип реализации такой же как при разработке двухмерных игр. Счетчик времени, графика, анимация, реакции на нажатия клавиш и мыши. Так что считайте, что вы будете писать игру, и исходя из этого ищите как это делается на языке программирования.
    И да, питон не самый удобный выбор, если надо по-быстрому запилить игру, хоть и не самый безнадежный. Я бы, пожалуй, тоже предпочел js/html, кроме названых причин, еще и потому, что возможность пользоваться обучающей программой просто имея доступ в интернет, ничего не устанавливая - сильный плюс.
    Ну и конечно удобно, что js/html игру можно разобрать по косточкам, просто заглянув в исходный код вебстраницы, если захочется решение перенять. И материала, как делать игры на js/html очень много, это сегодня модно и не делает этого только ленивый.
    Вот посмотрите https://www.youtube.com/watch?v=iGCMkmnm89M (серия туториалов), я уверен, вы быстро освоитесь. JavaScript никак не сложнее питона.
    И еще есть сервисы типа jsbin.com и jsfiddle.net чтобы попробовать наброски кода.
    Ответ написан
  • Как хранить табличные данные для Python?

    lxsmkv
    @lxsmkv
    Test automation engineer
    CSV конечно подойдет (уже упоминали). Работа с CSV вообще встроена в базовые библиотеки,так что ничего инсталлировать даже не придется (это преимущество больше на тот случай если скрипт на каком нибудь чужом сервере нужно будет выполнять, где просто так никакой pip не запусить). И экспорт/импорт для CSV в экселе есть.
    Конечно есть и библиотеки для питона чтобы работать с файлами эксель напрямую, openpyxl например.
    Ответ написан
    Комментировать
  • МОжно ли сделать передачу данных в форму?

    lxsmkv
    @lxsmkv
    Test automation engineer
    selenium же ;-)
    0. python -m pip install selenium;
    качаем, geckodriver https://github.com/mozilla/geckodriver/releases
    вынимаем из архива, прописываем его место нахождения в PATH
    1. пишем скриптик
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    import os
    binary = FirefoxBinary(r'C:\PortableApps.com\PortableApps\FirefoxPortable\App\Firefox\firefox.exe')
    driver = webdriver.Firefox(firefox_binary=binary)
    driver.get("https://perevod.mtbank.by/")
    elem = driver.find_element_by_name("from0")
    elem.clear()
    elem.send_keys("1234234563456456723")	
    elem1 = driver.find_element_by_name("to0")
    elem1.send_keys("1234234563456456723")
    driver.close()

    2. Допиливаем пример напильником
    3. ...
    4 PROFIT
    Ответ написан
    2 комментария
  • Как правильно генерировать псевдослучайные числа?

    lxsmkv
    @lxsmkv
    Test automation engineer
    возьмите последовательность чисел от 0 до n, возьмите за шаг любое простое число p > n/2, и вынимайте из последовательности каждое число за номером p по кругу.
    Но и тут последовательности. А вам я так понял нужно чтобы оно "создавалось" а не выбиралось.
    Хоря, что плохого в выбирании, ведь карты из неотосортированной колоды тоже выбирают, и ничего, такой выбор считается случайным. A так на основании системного времени. Или белого шума радиочастоты. Или из сервиса на random.org. Если ваш алгоритм будет проходить тест diehard - отпишитесь, всем будет интересно ;)
    Ответ написан
    Комментировать
  • Как задать тип входного параметра в pycharm?

    lxsmkv
    @lxsmkv
    Test automation engineer
    в докстринге написать
    @type my_param: typename
    класс (если typename имеет тип класса) должен быть известен, т.е. импортирован

    или так https://www.jetbrains.com/help/pycharm/2016.1/usin...
    Ответ написан
    Комментировать
  • Что с кодом этим?

    lxsmkv
    @lxsmkv
    Test automation engineer
    from bottle import route, run, template, response
    import random
    
    
    @route('/reg/<name>/<pw>')
    def index(name, pw):
      cookie_hash = random.randrange(10000000000)
      response.set_header('Set-Cookie', 'cookie_hash=%s' % (cookie_hash))
      return template('<b>Hello {{name}}, {{hash}}, {{pw}} </b>!', name=name, hash=cookie_hash, pw=pw)
    run(host='localhost', port=8080)

    у меня этот код работает, даю запрос на localhost:8080/reg/bottle/neck
    смотрю в хедер ответа в файрфоксе - значение пишется в cookie_hash, именно то, которое было сгенерировано. Все пучком.
    Ответ написан
    Комментировать
  • Как преобразовать список чисел в список комплексных чисел в Python?

    lxsmkv
    @lxsmkv
    Test automation engineer
    data=[4,5,7,8,9,0,3,3,6,6]
    result =  []
    for i in range(0,len(data), 2):
    	result.append("("+str(data[i])+"+"+str(data[i+1])+"j"+")")
    print result

    Выдает:
    ['(4+5j)', '(7+8j)', '(9+0j)', '(3+3j)', '(6+6j)']
    Ответ написан
  • Язык программирования для решения олимпиадных задач?

    lxsmkv
    @lxsmkv
    Test automation engineer
    если принимают питон, берите питон
    Ответ написан
    3 комментария
  • Как вывести данные на гистограмму?

    lxsmkv
    @lxsmkv
    Test automation engineer
    там где вы выводите абсолютно значение (1500 и т.д.) нужно 1500 делить на сумму абсолютных значений всех столбцов это будет доля этого столбца.
    Говоря геометрически это доля площади столбца в общей площади фигуры под графиком.
    Ответ написан
    3 комментария