Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как узнать контрольную сумму файла


(kom) #1

Есть кейворд Get File Size, что удобно, но мне еще нужно узнать и crc файла, как это можно сделать?


(D.Z.) #2

  *** Test Cases ***

CRС test
${crc}= Evaluate zlib.crc32(file('c:/TMP/Tmp.txt', 'r').read()) zlib
Log ${crc}

 

Также примите во внимание:

Changed in version 2.6: The return value is in the range [-2**31, 2**31-1] regardless of platform. In older versions the value would be signed on some platforms and unsigned on others.
Changed in version 3.0: The return value is unsigned and in the range [0, 2**32-1] regardless of platform.

(с) http://docs.python.org/library/zlib.html


(kom) #3

я так понимаю надо подключить библиотеку zlib, как это сделать скажите пожалуйста?

а, библиотека уже подключена, надо только вспомнить как правильно путь указывать, а то опять слешы не видит...


(kom) #4

Удалось узнать crc по файлу, но после выполнения этого кейворда мне нужно этот самый файл удалить, с помощью OperatingSystem.Remove File, но вылетает ошибка: OSError: unlink(): an unknown error occured: путь к файлу

DEBUG Traceback (most recent call last): File "C:\Python27\Lib\site-packages\robot\libraries\OperatingSystem.py", line 620, in remove_file os.remove(match)

 

кейворд по определению crc шел после get file size, поставил наоборот - сработало


(Mykhailo Poliarush) #5

а можно посмотреть на весь тест целиком

честно говоря, не совсем понятно, что да как у вас в тесте


(kom) #6

допустим я создаю файл (или копирую с удаленного сервера)

create file    c:/temp/test    for deletion

узнаю его контрольную сумму

${sum1}    Evaluate    zlib.crc32(file('c:/temp/test', 'r').read())    zlib

затем хочу его удалить

remove file    c:/temp/test

или так

Evaluate    os.remove('c:/temp/test')    os

 

Все равно выдает эту ошибку


(Mykhailo Poliarush) #7

пару наводящих вопросов

а что если, просто создать файл и удалить его, у вас тогда все хорошо проходит? (без узнавания контрольной суммы)

надо просто локализовать ошибку

сходу по коду так тяжело сказать

может быть еще вариант такой, что при чтении файла открывает файловый дескриптор и не закрывается

соответственно, в таком случае нельзя удалить файл, но это нужно проверять (это только догадка)


(kom) #8

Если просто создавать и удалять - все нормально.

При чем проверял это на 2х разных компьютерах.


(Mykhailo Poliarush) #9

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

${sum1}    Evaluate    zlib.crc32(file('c:/temp/test', 'r').read())    zlib

можно  попробовать закрыть файл через метод close()


(kom) #10

Как это сделать?

Evaluate    close('c:/temp/test')

?


(Mykhailo Poliarush) #11

Evaluate - это прямое выполнение python кода

значит, надо открыть файл с сохранить его в переменную, а потом закрыть

http://docs.python.org/2/library/stdtypes.html#file.close

 


(kom) #12

т.е. нужно открыть, потом узнать crc, потом закрыть этот файл?


(Mykhailo Poliarush) #13

да, но это только предположение

надо его проверить


(kom) #14

Я не знаю как отрыть файл:

Evaluate    os.open(file('c:/temp/test')    os

так не выходит SyntaxError: no viable alternative at input '\n' (<string>, line 1)

попробовал так:

${fd}    Evaluate    os.open( 'c:/temp/test', os.O_RDONLY )    os
${crc}    Evaluate    zlib.crc32(file('c:/temp/test', 'r').read())    zlib

evaluate    ${fd}.close()    os

Выдает ошибку:

Evaluating expression 'org.python.core.io.FileIO@1593ce6.close()' failed: SyntaxError: no viable alternative at input '@' (<string>, line 1)

в ${fd} всегда возвращется значение типа org.python.core.io.FileIO@1593ce6 и всегда на этом символе '@' ругается и не выполняется

${fd}.close()

 

я заметил, что есть такой флаг при открытии файла:

os.O_NONBLOCK: do not block on open

а можно это как-то использовать в случае с  crc32?