Продолжить обсуждение из DatabaseLibrary как получить одно значение из выборки:
Для внутреннего форума я писал такую подсказу (на основе [OracleDB][1], но должно быть понятно)
В случае получения данных из БД могут появится проблемы с кодировкой русского текста. Например, при использовании следующих конструкций
(1)
${sql_string}= catenate SELECT 'Значение' FROM dual
@{res}= Query ${sql_string}
(2)
${sql_string}= catenate SEPARATOR=${\n} DECLARE
... lv_1 VARCHAR2(100);
... lv_2 VARCHAR2(100);
... BEGIN
... SELECT 'Значение 1', 'Значение 2'
... INTO lv_1, lv_2
... FROM dual;
... dbms_output.put_line(lv_1);
... dbms_output.put_line(lv_2);
... END;
@{res}= OracleDB.execute_plsql_block_with_dbms_output ${sql_string}
будет получено следующее:
(1)
${res} = [('\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5',)]
(2)
@{res} = [ \xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 1 | \xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 2 ]
Для декодирования полученных строк необходимо использовать keyword 'Decode Bytes To String' (библиотека [String][2]):
(1)
${decoded_res}= Decode Bytes To String ${res[0][0]} windows-1251
(2)
${decoded_res_1}= Decode Bytes To String ${res[0]} windows-1251
${decoded_res_2}= Decode Bytes To String ${res[1]} windows-1251
[1]: https://github.com/dmizverev/robot-framework-library/blob/master/library/OracleDB.py
[2]: https://code.google.com/p/robotframework/wiki/StringLibrary
Да, спасибо, мне как раз нужно для OracleDB
Нет, я думал, что это не стоит внимания.
Вообще, в закромах моего Evernote есть маленькие заметки. По сравнению с большими статьями они ерунда, но в жизни помогали.
Сейчас есть свободный час: напишу про интеграцию с TestLink
Ну так доставай из Evernote и выкладывай. А большая или маленькая - это роль не играет, если кому-то пригодиться.
как ни странно такой кейворд не видит Decode Bytes To String, хотя у меня стоит Robot Framework 2.8.1
Вы библиотеку String подключили?
Лучше покажите код теста.
да, библиотека подключена:
*** Settings ***
Suite Setup
Test Setup
Test Teardown
Force Tags test
Library OperatingSystem
Library Dialogs
Library String
split string и остальные старые кейворды работают, а Decode и encode bytes To String - нет
Кейворд работает, но не подсвечивается синим цветом, поэтому и подумал что с ним проблема.
Хорошо, что Вы разобрались.
После недели кодинга в RIDE, как правило, переходишь в Eclipse или Sublime и начинаешь помнить все кейворды и подключенные библиотеки наизусть
да ладно тебе, скажи что ты полностью отказался от RIDE и все тесты пишешь через Eclipse?
Пишу исключительно в Eclipse
Группы тестов запускаю в RIDE. В нём есть очень полезная функция: pause on failure.
Такая ситуация: выбираю значение с веб-страницы с selenium2libary.get text, добавляю его в список ${textlist} с помощью append to list, и потом мне нужно выбрать из БД все остальные записи, кроме тех что в списке:
если указываю конкретное значение:
query select * from table where description not in (’${textlist[1]}’)
то все правильно, но мне нужно все значения в списке:
query select * from table where description not in (’@{textlist}’)
а так не работает, список в выборку попадает в unicode формате
Дописал os.environ[‘NLS_LANG’] = ‘American_America.AL32UTF8’ в connection_manager.py, но ситуация не изменилась.
Решил следующим образом: вместо списка каждое значение дописал в файл, потом все содержимое файла взял с помощью get file, и это значение использовал в выборке, так не возникает проблем с кириллицей.
Может есть более простой способ?
А у вас бы этот способ и не прошёл бы, т.к. вы объект типа list пытаетесь подсунуть строке.
Замечание: в библиотеке OracleDB нет привидения типов, там всё - строка.