Ферма устройств — как получить доступ к дополнительным данным с помощью appium python

Я пытаюсь запустить модульные тесты, для которых требуются внешние данные на ферме устройств с помощью Appium Python. Я загружаю данные в виде zip-файла в аргумент «дополнительные данные» и ввожу «/sdcard/» в аргумент «android». Я пытаюсь вызвать файлы в скрипте Python, используя здесь «/WordCountTest1MB». Обратите внимание, что у файлов нет расширения, это просто текст. Однако все мои тесты терпят неудачу, говоря, что:

test_paramec_0__sdcard_WordCountTest1MB failed: IOError: No such file or directory: '/sdcard/WordCountTest1MB'

Есть ли что-то еще, что мне нужно сделать, чтобы получить доступ к этим файлам?

Любая помощь высоко ценится!

РЕДАКТИРОВАТЬ: Вот код, размещенный ниже, обратите внимание, что мы пытаемся найти местоположение данных в аргументе дополнительных данных, однако имена этих каталогов меняются с каждым, поэтому нам нужно сначала найти путь хотя бы к одному из нужные файлы:

import unittest2
from appium import webdriver
from parameterized import parameterized
import os

for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.startswith("WordCountTest10MB.txt")]:
        dir_name =  os.path.join(dirpath, filename)

print os.path.dirname(dir_name)


def Test1(rootDir):
    list_dirs = os.walk(rootDir)
    for root, dirs, files in list_dirs:
        for d in dirs:
            print os.path.join(root, d)
        for f in files:
            print os.path.join(root, f)

# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)

def wordcount(filename):
    for j in range(1, 10):
        wordcount = {}
        inFile = filename
        with open(os.path.abspath(inFile)) as file:  # with can auto close the file
            for word in file.read().split():
                if word not in wordcount:
                    wordcount[word] = 1
                else:
                    wordcount[word] += 1
        wordcount = sorted(wordcount.items(), key=lambda x: x[1], reverse=True)
        for k, v in wordcount:
            print(k, v)

class WordCountTest(unittest2.TestCase):

    known_files = {'/WordCountTest1MB.txt',
                   '/WordCountTest5MB.txt',
                   '/WordCountTest10MB.txt'}

    def SetUpClass(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '5.0'
        desired_caps['deviceName'] = 'Android Emulator'
        desired_caps['app'] = PATH('../../../apps/Nothing_v0_apkpure.com.apk')
        self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    @parameterized.expand(known_files)

    def test_paramec(self, filename):
        os.chdir(dir_name)
        print os.getcwd(), Test1(os.getcwd())
        wordcount(filename)

    def TearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest2.main()

person J. Gursky    schedule 02.12.2017    source источник


Ответы (2)


Похоже, здесь есть проблема

def wordcount(filename):
    ....
    ....
        with open(os.path.abspath(inFile)) as file:  # with can auto close the file
    ....

приведенное выше заявление не дает правильный путь к файлу, вам нужно исправить это, вот список примеров, ссылаясь на которые вы можете исправить свой путь

fileDir = os.path.dirname(os.path.realpath('__file__'))
print fileDir

#For accessing the file in the same folder
filename = "same.txt"
readFile(filename)

#For accessing the file in a folder contained in the current folder
filename = os.path.join(fileDir, 'Folder1.1/same.txt')
readFile(filename)

#For accessing the file in the parent folder of the current folder
filename = os.path.join(fileDir, '../same.txt')
readFile(filename)

#For accessing the file inside a sibling folder.
filename = os.path.join(fileDir, '../Folder2/same.txt')
filename = os.path.abspath(os.path.realpath(filename))
print filename
person pankaj mishra    schedule 14.12.2017

два варианта, которые вы можете попробовать

1) добавить .txt в каждый элемент набора

 known_files = {'/sdcard/WordCountTest1MB.txt',
 '/sdcard/WordCountTest5MB.txt',
 '/sdcard/WordCountTest10MB.txt'}

2) Используйте комбинацию glob и fileinput

 import fileinput
 from glob import glob
 #This will store all the file names
 fnames = glob('WordCountTest*')
 for line in fileinput.input(fnames):
     pass # modify your code
person pankaj mishra    schedule 04.12.2017
comment
Нужно ли что-то делать с аргументом «Android» в настройках тестового запуска. Он говорит это: Извлекает файлы с SD-карты. Используйте завершающую косую черту, если вы хотите рекурсивно извлекать содержимое папки. Например. /sdcard/, /sdcard/папка/, /sdcard/файл - person J. Gursky; 04.12.2017