Тестирование программного обеспечения
Особенности определения корректности функционирования анализируемой программы. Анализ основных способов его проведения. Разработка и автоматизация тест-кейсов. Рассмотрение аннотация @Test. История развития тестирования программного обеспечения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 30.08.2016 |
Размер файла | 52,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
delay(3000);
report.report("Wait till presence updates..");
delay(20000);
report.report("Check out of office presence state of +" + contactNumber);
phoneB.pressKey(OneXKey.MENU, keypadDelay);
switch(phoneB.getModelType()) {
case MODEL_9601:
case MODEL_9608:
case MODEL_9611:
phoneB.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
phoneB.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneB.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 6);
phoneB.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 5);
phoneB.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneB.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9641:
phoneB.touch(OneXScreenObject.AMENU_MY_PRESENCE, keypadDelay);
phoneB.touch(OneXScreenObject.NAVIGATION_UP, keypadDelay, 2);
phoneB.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay, 1);
phoneB.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
phoneB.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
break;
}
phoneB.pressKey(OneXKey.PHONE, keypadDelay);
delay(5000);
if(!comparePresence("OutOfOffice" ,phoneB, phoneA))
report.report("Presence state is not the same on topline and address book", Reporter.FAIL);
else
report.report("Presence state is the same on topline and address book");
delay(3000);
deleteAllContacts(phoneA);
}
catch(Exception e) {
reportException(e);
}
finally {
logoutFromAMenu(phoneB);
loginAfterLogoutFromAMenu(phoneB, phoneB.getExtensionNumber(), phoneB.getPassword());
}
}
/**
* Test Case
* Check, that Presence state "Offline" of extension,
* which has E.164 handle in profile and Presence state of this contact in address book of other extension are similar
* Setup:
* Phone A; Phone B
* 1. Phone A - watcher
* 2. User X has E.164 handle in profile
* Scenario:
* 1. Phone B login to user X
* 2. Phone A adds user X in address book
* 3. Check that presence state on topline of E.164 extension and presence state of this contact in address
* book of watcher are the same
* @throws Exception
* @author mchugun
*/
@Test
@TestProperties(name = "Comprasion of Presence state Offline of extension, that has E.164 handle in profile with Presence state of this extension in address book of other extension", paramsInclude = {"ImagesDatabaseFolderName",
"ScreenshotMode", "contactNumber"})
public void compareOfflinePresenceState() throws Exception {
try {
report.report("Initialization of " + phoneA.getExtensionNumber());
phoneInit(phoneA, true);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
updateImagesDatabasePath();
deleteAllContacts(phoneA);
report.report("Login to extension with E.164 handle");
logoutFromAMenu(phoneB);
switch(phoneB.getModelType()) {
case MODEL_9601:
phoneB.pressKey(OneXKey.SOFT_KEY_2, keypadDelay, 3);
phoneB.pressKey(OneXKey.KEY_1, keypadDelay, 12);
phoneB.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneB.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
break;
case MODEL_9608:
case MODEL_9611:
phoneB.pressKey(OneXKey.SOFT_KEY_2, keypadDelay, 3);
phoneB.pressKey(OneXKey.KEY_1, dialKeypadDelay, 12); // enter "+"
phoneB.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
break;
case MODEL_9641:
phoneB.touch(OneXScreenObject.SOFT_KEY_2, keypadDelay, 3);
phoneB.pressKey(OneXKey.KEY_1, dialKeypadDelay, 12);
phoneB.touch(OneXScreenObject.SOFT_KEY_2, keypadDelay);
break;
}
loginAfterLogoutFromAMenu(phoneB, contactNumber, phoneA.getPassword());
delay(2000);
report.report("Initialization of +" + contactNumber);
phoneInit(phoneB, true);
phoneB.getCAState(1, 100);
phoneB.getCAState(2, 100);
phoneB.getCAState(3, 100);
report.report("Add contact with E.164 in " + phoneA.getExtensionNumber());
phoneA.pressKey(OneXKey.ADDRESS_BOOK, keypadDelay);
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.typeText("A", keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 3);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_RIGHT, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneA.typeNumber(contactNumber, dialKeypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.typeText("A", keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 3);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_RIGHT, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneA.typeNumber(contactNumber, dialKeypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
phoneA.typeText("A", keypadDelay);
phoneA.touch(OneXScreenObject.KEYBOARD_ENTER, keypadDelay, 2);
phoneA.touch(OneXScreenObject.KEYBOARD_123, keypadDelay);
phoneA.pressKey(OneXKey.KEY_1, dialKeypadDelay, 12);
phoneA.touch(OneXScreenObject.KEYBOARD_123, keypadDelay);
phoneA.typeNumber(contactNumber, dialKeypadDelay);
phoneA.touch(OneXScreenObject.KEYBOARD_ENTER, keypadDelay);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
break;
}
report.report("Contact is created");
delay(3000);
report.report("Wait till presence updates..");
delay(20000);
report.report("Check Offline presence state of +" + contactNumber);
phoneB.pressKey(OneXKey.MENU, keypadDelay);
switch(phoneB.getModelType()) {
case MODEL_9601:
case MODEL_9608:
case MODEL_9611:
phoneB.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
phoneB.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneB.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 6);
phoneB.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 5);
phoneB.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneB.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9641:
phoneB.touch(OneXScreenObject.AMENU_MY_PRESENCE, keypadDelay);
phoneB.touch(OneXScreenObject.NAVIGATION_UP, keypadDelay, 2);
phoneB.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay, 1);
phoneB.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
phoneB.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
break;
}
phoneB.pressKey(OneXKey.PHONE, keypadDelay);
delay(5000);
if(!comparePresence("Offline", phoneB, phoneA))
report.report("Presence state is not the same on topline and address book", Reporter.FAIL);
else
report.report("Presence state is the same on topline and address book");
delay(3000);
deleteAllContacts(phoneA);
}
catch(Exception e) {
reportException(e);
}
finally {
logoutFromAMenu(phoneB);
loginAfterLogoutFromAMenu(phoneB, phoneB.getExtensionNumber(), phoneB.getPassword());
}
}
/**
* Test Case to address SIP96X1-16986
* Verify, that it possible to change from numeric mode to character when a contact is creating
* Test for: non-touch phones 9608, 9611, SONIC
* Setup:
* 1) First Name: tma123TMA
* Firsr part: tma
* Second part: 123
* Third part: TMA
* Scenario:
* 1. Set idle state on phoneA
* 2. Delete all contacts
* 3. Create a contact with name "tma123TMA" to check changing from numeric to characters
* 4. After "123", change numeric mode to character and check buttons. It should be like "Clear", "Symbol", "ABC", "More"
* 5. Enter the last piece of name of contact
* 6. Compare name of created contact to "tma123TMA"
* @throws Exception
* @author mchugun
*/
@Test
@TestProperties(name = "Changing of numeric mode to character and vice versa", paramsInclude = {"ImagesDatabaseFolderName",
"ScreenshotMode"})
public void numericToCharacter() throws Exception {
try {
report.report("Initialization");
phoneInit(phoneA, true);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
updateImagesDatabasePath();
deleteAllContacts(phoneA);
checkFullImageWithoutDateTime(phoneA, "IdleBeforeTest", null);
report.report("Create a contact to check change from numeric to character mode");
phoneA.pressKey(OneXKey.ADDRESS_BOOK, keypadDelay);
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay, 2);
phoneA.typeText("tma", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.typeNumber("123", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay, 2);
phoneA.checkButtons("Symbol", "ABC", "More");
phoneA.typeText("TMA", keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 2);
phoneA.pressKey(OneXKey.NAVIGATION_RIGHT, keypadDelay);
phoneA.typeNumber("12345", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay, 2);
phoneA.typeText("tma", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.typeNumber("123", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay, 2);
phoneA.checkButtons("Clear", "Symbol", "ABC", "More");
phoneA.typeText("TMA", keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 2);
phoneA.pressKey(OneXKey.NAVIGATION_RIGHT, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
phoneA.typeNumber("12345", keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
}
report.report("Contact created");
delay(5000);
checkFullImageWithoutDateTime(phoneA, "Contact created", null);
report.report("Check the name of this contact");
if(phoneA.getContactsScreenLines()[0].contains("tma123TMA"))
report.report("The name of created contact on " + phoneA.getExtensionNumber() + " is correct");
else
report.report("The name of created contact on " + phoneA.getExtensionNumber() + " is NOT correct", Reporter.FAIL);
delay(5000);
phoneA.pressKey(OneXKey.PHONE, keypadDelay);
deleteAllContacts(phoneA);
checkFullImageWithoutDateTime(phoneA, "IdleAfterTest", null);
}
catch (Exception e) {
reportException(e);
}
}
/**
* Test Case
* Check that Packet Capture can not be started when it's disabled in debug menu
* Setup:
* Add options to setting file
* SLMSTAT - 1
* SLMCLIENT - 1
* SLMFSB - 1
* SLMPERF - 1
* SLMCTRL - 2
* SLMCAP - 3
* SLMPORT - 50011
* SLMTEST - 50012
* SLMSRVR - 192.168.39.140:50011
* PROCPSWD - 1234
* Scenario:
* 1. Reboot Phone A to apply settings Login User/Station A
* 2. Phone A navigate CRAFT -> Debug
* 3. Turn on packet capture on SLA Monitor server
* 4. Check no active capturing via SLA Server
* 5. Check no active capturing via /tmp/slamon/capturing file
* 6. Check no active capturing via REC icon
*
* @throws Exception
*/
@Test
@TestProperties (name = "Impossible to turn on Packet Capture when it's disabled",
paramsInclude = {"ImagesDatabaseFolderName","ScreenshotMode","SLAserver","SLAlogin","SLApassword", "webBrowser"})
public void PacketCaptureCanNOTBeStartedWhenTheyAreDisabled() throws Exception {
try {
report.startLevel("Initialization");
updateImagesDatabasePath();
String[] options = {"SLMSTAT", "1", "SLMCLIENT", "1", "SLMFSB", "1", "SLMPERF", "1", "SLMCTRL",
"2", "SLMCAP", "3", "SLMPORT", "50011", "SLMTEST", "50012",
"SLMSRVR","192.168.39.140:50011", "PROCPSWD", "1234"};
addOptionsToTheSettingsFile(options, phoneA);
phoneInit(phoneA, true);
delay(1000);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
report.stopLevel();
report.report("Enter in craft menu");
phoneA.enterCraftMenu("1234");
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Debug_Mode", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Control", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Record", null);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
phoneA.touch(OneXScreenObject.NAVIGATION_UP, keypadDelay);
break;
}
String slmErr = "The entered agent is not packet capture enabled :"+phoneA.getExtensionNumber();
String slmSuccess = "Agent(s) added to working set :"+phoneA.getExtensionNumber();
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
enableAgentsIE(SLAserver, SLAlogin, SLApassword);
report.report("Turn on packet capture for "+phoneA);
Thread.sleep(2000);
WebElement packetCapture = driver.findElement(By.xpath("//a[@id =\"j_idt64:j_idt66:remoteControlMenuItem:packetSniffMenuItem:link\"]"));
String script = "var object = arguments[0];"
+ "var event = document.createEventObject(\"MouseEvent\");"
+ "object.fireEvent(\"onclick\", event);";
((JavascriptExecutor)driver).executeScript(script, packetCapture);
Thread.sleep(1000);
driver.navigate().refresh();
WebElement enterExtension = driver.findElement(By.xpath("//input[@name =\"packetSniffAgentControlForm:addRemoteAgentAddress\"]"));
enterExtension.sendKeys(phoneA.getExtensionNumber());
Thread.sleep(1000);
WebElement addAgent = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/text_button_add_agent.gif\"]"));
addAgent.sendKeys();
addAgent.click();
Thread.sleep(1000);
WebElement errorMessage = driver.findElement(By.xpath("//div[@id =\"packetSniffingMessages\"]"));
if(errorMessage.getText().contains(slmErr)) {
driver.navigate().refresh();
WebElement selectAllDis = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/select_all_dis.gif\"]"));
if(!checkTopLineSLAIcon(phoneA, "SLArecord")) {
if(!checkSLAMonFiles(phoneA, "capture")) {
report.report("The Packet Capture can't be started when they are disabled", ReportAttribute.BOLD);
report.report("File doesn't exist");
report.report("PASS: SLA record icon doesn't appear on top line "+phoneA);
if(selectAllDis.isDisplayed()) {
report.report("No agents to add. It means that packet capture can't be started", ReportAttribute.BOLD);
}
else {
WebElement selectAll = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/select_all.gif\"]"));
report.report("Can add agent when service mode record is disabled!", Reporter.FAIL);
selectAll.click();
}
closeBrowser();
}
else {
report.report("SLAMon file exist!", Reporter.FAIL);
closeBrowser();
}
}
else {
report.report("PASS: SLA record icon appears on top line "+phoneA, Reporter.FAIL);
closeBrowser();
}
}
else
if (errorMessage.getText().contains(slmSuccess)) {
driver.navigate().refresh();
WebElement selectAll = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/select_all.gif\"]"));
WebElement startCapture = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/text_button_start_capture.gif\"]"));
report.report(slmSuccess + " when packet capture is disabled", Reporter.FAIL);
if(selectAll.isDisplayed()) {
selectAll.click();
startCapture.click();
report.report("The Packet Capture was started when it's disabled", Reporter.FAIL);
if(checkSLAMonFiles(phoneA, "capture"))
report.report("File capture exists when service mode record is disabled", Reporter.FAIL);
else
report.report("File capture doesn't exist");
if(checkTopLineSLAIcon(phoneA, "SLArecord"))
report.report("PASS: SLA record icon appears on top line "+phoneA, Reporter.FAIL);
else
report.report("PASS: SLA record icon doesnt appear on top line "+phoneA);
}
turnOffPacketCapture();
closeBrowser();
}
}
}
catch(Exception e) {
reportException(e);
report.closeAllLevels();
}
finally {
restoreSettingsFile(phoneA);
}
}
/**
* Test Case
* Check that Remote Control can not be started when it's disabled in debug menu
* Setup:
* Add option to the setting file
* SLMSTAT 1
* SLMCLIENT 1
* SLMFSB 1
* SLMPERF 1
* SLMCTRL 2
* SLMCAP 3
* SLMPORT 50011
* SLMTEST 50012
* SLMSRVR 192.168.39.140:50011
* PROCPSWD 1234
* Phone A should be in idle state
* Scenario:
* 1. Reboot Phone A to apply settings Login User/Station A
* 2. Phone A navigate CRAFT -> Debug
* 3. Turn on remote control on SLA Monitor server
* 4. Check no active remote control session via SLA Server
* 5. Check no active remote control session via /tmp/slamon/capturing file
* 6. Check no active remote control session via CTRL icon
* @throws Exception
*/
@Test
@TestProperties (name = "Impossible to turn on Remote Control when it's disabled",
paramsInclude = {"ImagesDatabaseFolderName","ScreenshotMode","SLAserver","SLAlogin","SLApassword", "webBrowser"})
public void RemoteControlCanNOTBeStartedWhenTheyAreDisabled() throws Exception {
try {
report.startLevel("Initialization");
updateImagesDatabasePath();
String[] options = {"SLMSTAT", "1", "SLMCLIENT", "1", "SLMFSB", "1", "SLMPERF", "1", "SLMCTRL",
"2", "SLMCAP", "3", "SLMPORT", "50011", "SLMTEST", "50012",
"SLMSRVR","192.168.39.140:50011", "PROCPSWD", "1234"};
addOptionsToTheSettingsFile(options, phoneA);
phoneInit(phoneA, true);
delay(1000);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
report.stopLevel();
report.report("Enter in craft menu");
phoneA.enterCraftMenu("1234");
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Debug_Mode", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Control", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Record", null);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
break;
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
phoneA.touch(OneXScreenObject.NAVIGATION_UP, keypadDelay);
break;
}
String slmErr = "Phone Remote Control not enabled for this phone.";
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
enableAgentsIE(SLAserver, SLAlogin, SLApassword);
turnOnRemoteControlIE(phoneA);
WebElement errorMessage = driver.findElement(By.xpath("//div[@id =\"packetSniffingMessages\"]"));
if(errorMessage.getText().contains(slmErr)) {
if(!checkTopLineSLAIcon(phoneA, "SLAcontrol")) {
if(!checkSLAMonFiles(phoneA, "control")) {
report.report("The remote control can't be started when they are disabled", ReportAttribute.BOLD);
report.report("File doesn't exist");
report.report("PASS: SLA record icon doesn't appear on top line "+phoneA);
closeBrowser();
}
else {
report.report("SLAMon file exist!", Reporter.FAIL);
closeBrowser();
}
}
else {
report.report("PASS: SLA record icon appears on top line "+phoneA, Reporter.FAIL);
closeBrowser();
}
}
else {
report.report("Remote Control has started when they are disabled", Reporter.FAIL);
turnOffRemoteControlIE();
closeBrowser();
}
}
}
catch(Exception e) {
reportException(e);
report.closeAllLevels();
}
finally {
restoreSettingsFile(phoneA);
}
}
/**
* Test Case
* Check, that CTRL icon shows up after relogin of extention, when remote control turned on
* Setup:
* Add option to the settings file:
* SLMSTAT 1
* SLMCLIENT 1
* SLMFSB 1
* SLMPERF 1
* SLMCTRL 2
* SLMCAP 3
* SLMPORT 50011
* SLMTEST 50012
* SLMSRVR 192.168.39.140:50011
* PROCPSWD 1234
* Scenario:
* 1. Reboot Phone A to apply settings Login User/Station A
* 2. Phone A navigate CRAFT -> Debug
* 3. Turn on service mode control Debug menu
* 4. Turn on remote control on SLA Monitor server
* 5. Check active remote control session via CTRL icon
* 6. Check active control session via /tmp/slamon/control file
* 7. Relogin From Amenu
* 8. Check that CTRL icon to be located on the top line
* @throws Exception
*/
@Test
@TestProperties (name = "Icon of Remote Control appears after relogin",
paramsInclude = {"ImagesDatabaseFolderName","ScreenshotMode","SLAserver","SLAlogin","SLApassword", "webBrowser"})
public void RemoteControlIcon() throws Exception {
try {
report.startLevel("Initialization");
updateImagesDatabasePath();
String[] options = {"SLMSTAT", "1", "SLMCLIENT", "1", "SLMFSB", "1", "SLMPERF", "1", "SLMCTRL",
"2", "SLMCAP", "3", "SLMPORT", "50011", "SLMTEST", "50012",
"SLMSRVR","192.168.39.140:50011", "PROCPSWD", "1234"};
addOptionsToTheSettingsFile(options, phoneA);
phoneInit(phoneA, true);
delay(1000);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
report.stopLevel();
report.report("Enter in craft menu");
phoneA.enterCraftMenu("1234");
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Debug_Mode", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Control", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Record", null);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
break;
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_2, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "RemoteControlEnabled", null);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
break;
}
report.report("Turn on Remote Control on " + phoneA.getExtensionNumber());
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
enableAgentsIE(SLAserver, SLAlogin, SLApassword);
turnOnRemoteControlIE(phoneA);
}
if(!checkTopLineSLAIcon(phoneA, "SLAcontrol")) {
if(!checkSLAMonFiles(phoneA, "control")) {
report.report("File doesn't exist", Reporter.FAIL);
report.report("PASS: SLA record icon doesn't appear on top line " + phoneA, Reporter.FAIL);
}
else
report.report("SLAMon file exist");
}
else
report.report("PASS: SLA control icon appears on top line " + phoneA, ReportAttribute.BOLD);
delay(5000);
report.report("Do Relogin");
logoutFromAMenu(phoneA);
delay(3000);
loginAfterLogoutFromAMenu(phoneA, phoneA.getExtensionNumber(), phoneA.getPassword());
delay(7000);
report.report("Check that SLA control icon exist");
if(!checkTopLineSLAIcon(phoneA, "SLAcontrol"))
report.report("PASS: SLA control icon doesn't appear on top line " + phoneA, Reporter.FAIL);
else
report.report("PASS: SLA control icon appears on top line " + phoneA, ReportAttribute.BOLD);
if(!checkSLAMonFiles(phoneA, "control"))
report.report("File doesn't exist", Reporter.FAIL);
else
report.report("SLAMon file exist");
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
turnOffRemoteControlIE();
delay(3000);
closeBrowser();
}
delay(5000);
if(!checkTopLineSLAIcon(phoneA, "SLAcontrol")) {
if(!checkSLAMonFiles(phoneA, "control")) {
report.report("File doesn't exist");
report.report("PASS: SLA control icon doesn't appear on top line " + phoneA);
}
else
report.report("SLAMon file exist", Reporter.FAIL);
}
else
report.report("PASS: SLA control icon appears on top line " + phoneA, Reporter.FAIL);
}
catch(Exception e) {
reportException(e);
report.closeAllLevels();
}
finally {
restoreSettingsFile(phoneA, "1234");
}
}
/**
* Test Case
* Check, that REC icon shows up after relogin, when packet capture is turned on
* Setup:
* Add option to the settings file
* SLMSTAT 1
* SLMCLIENT 1
* SLMFSB 1
* SLMPERF 1
* SLMCTRL 2
* SLMCAP 3
* SLMPORT 50011
* SLMTEST 50012
* SLMSRVR 192.168.39.140:50011
* PROCPSWD 1234
* Scenario:
* 1. Reboot Phone A to apply settings Login User/Station A
* 2. Phone A navigate CRAFT -> Debug
* 3. Turn on service mode record Debug menu
* 4. Turn on packet capture on SLA Monitor server
* 5. Check active capturing via REC icon
* 6. Check active capturing via /tmp/slamon/control file
* 7. Relogin From Amenu
* 8. Check that REC icon to be located on the top line
*
* @throws Exception
*/
@Test
@TestProperties (name = "Icon of Packet Capture appears after relogin",
paramsInclude = {"ImagesDatabaseFolderName","ScreenshotMode","SLAserver","SLAlogin","SLApassword", "webBrowser"})
public void PacketCaptureRECIcon() throws Exception {
try {
report.startLevel("Initialization");
updateImagesDatabasePath();
String[] options = {"SLMSTAT", "1", "SLMCLIENT", "1", "SLMFSB", "1", "SLMPERF", "1", "SLMCTRL",
"2", "SLMCAP", "3", "SLMPORT", "50011", "SLMTEST", "50012",
"SLMSRVR","192.168.39.140:50011", "PROCPSWD", "1234"};
addOptionsToTheSettingsFile(options, phoneA);
phoneInit(phoneA, true);
delay(1000);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
report.stopLevel();
report.report("Enter in craft menu");
phoneA.enterCraftMenu("1234");
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Debug_Mode", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Control", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu:Service_Mode_Record", null);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.NAVIGATION_UP, keypadDelay, 4);
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 4);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.pressKey(OneXKey.NAVIGATION_DOWN, keypadDelay, 2);
phoneA.pressKey(OneXKey.SOFT_KEY_1, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.NAVIGATION_DOWN, keypadDelay);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_5, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "Debug_Menu", null);
phoneA.touch(OneXScreenObject.LINE_APPEARANCE_3, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "RemoteControlEnabled", null);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
phoneA.touch(OneXScreenObject.SOFT_KEY_0, keypadDelay);
break;
}
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
enableAgentsIE(SLAserver, SLAlogin, SLApassword);
turnOnPacketCaptureIE(phoneA);
}
else if(webBrowser == WebBrowser.GOOGLE_CHROME) {
enableAgents(SLAserver, SLAlogin, SLApassword);
turnOnPacketCapture(phoneA);
}
if(webBrowser == WebBrowser.INTERNET_EXPLORER) {
WebElement startCapture = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/text_button_start_capture.gif\"]"));
startCapture.click();
}
else if(webBrowser == WebBrowser.GOOGLE_CHROME) {
WebElement startCapture = driver.findElement(By.xpath("//img[@src =\"/slamon/resources/css/images/text_button_start_capture.gif\" and @style = \"border:none;\"]"));
startCapture.click();
}
delay(4000);
if(!checkTopLineSLAIcon(phoneA, "SLArecord"))
reportFail("FAIL: SLA record icon doesnt appear on top line "+phoneA);
else
report.report("PASS: SLA record icon appears on top line "+phoneA);
delay(5000);
report.report("Do Relogin");
logoutFromAMenu(phoneA);
delay(3000);
loginAfterLogoutFromAMenu(phoneA, phoneA.getExtensionNumber(), phoneA.getPassword());
delay(20000);
report.report("Check that SLA record icon exist");
if(!checkTopLineSLAIcon(phoneA, "SLArecord"))
reportFail("FAIL: SLA record icon doesnt appear on top line "+phoneA);
else
report.report("PASS: SLA record icon appears on top line "+phoneA);
turnOffPacketCapture();
closeBrowser();
if (checkTopLineSLAIcon(phoneA, "SLArecord")){
reportFail("FAIL: SLA record icon appears on top line "+phoneA);
}
else{
report.report("PASS: SLA record icon doesnt appear on top line "+phoneA);
}
if (checkSLAMonFiles(phoneA, "capture")){
reportFail("FAIL: Capture file exists on "+phoneA);
}
else{
report.report("PASS: Capture file doesnt exist on "+phoneA);
}
}
catch(Exception e) {
reportException(e);
report.closeAllLevels();
}
finally {
restoreSettingsFile(phoneA, "1234");
}
}
/**
* Test Case to address SIP96X1-13140
* Check, that when clear history from All Calls, it clear too in Missed calls
* Setup:
* 1. The phoneA and phoneB should be in idle state
* 2. Phone A should has missed and other call logs in history screen
* Scenario:
* 1. Idle state for both phones
* 2. Create call logs
* 3. Delete all call logs and check that they are deleted actually
* 4. Move to missed call logs and check that is empty too
* 5. Move to all call logs and check it again
* @throws Exception
* @author mchugun
*/
@Test
@TestProperties(name = "Clearing history from all calls and from missed calls", paramsInclude = {"ImagesDatabaseFolderName",
"ScreenshotMode", "AudioDeviceForCall", "AudioDeviceForAnswer"})
public void clearBusyCallLogInHistoryScreen() throws Exception {
try {
report.report("Initialization");
phoneInit(phoneA, true);
phoneInit(phoneB, true);
phoneA.getCAState(1, 100);
phoneA.getCAState(2, 100);
phoneA.getCAState(3, 100);
phoneB.getCAState(1, 100);
phoneB.getCAState(2, 100);
phoneB.getCAState(3, 100);
updateImagesDatabasePath();
checkAudioDevices();
checkFullImageWithoutDateTime(phoneA, "IdleBeforeTest", null);
delay(5000);
report.report("Create some number of call logs and missed calls");
delay(2000);
report.report("PhoneA calls PhoneB and PhoneB answers");
startCall(phoneA, audioDeviceForCall, phoneB);
delay(2000);
answerCall(phoneB, audioDeviceForAnswer);
dropCall(phoneB, audioDeviceForAnswer);
dropCall(phoneA, audioDeviceForCall);
delay(2000);
startCall(phoneA, audioDeviceForCall, phoneB);
delay(2000);
answerCall(phoneB, audioDeviceForAnswer);
dropCall(phoneB, audioDeviceForAnswer);
dropCall(phoneA, audioDeviceForCall);
delay(2000);
report.report("PhoneB calls PhoneA and PhoneA answers");
startCall(phoneB, audioDeviceForCall, phoneA);
delay(2000);
answerCall(phoneA, audioDeviceForAnswer);
dropCall(phoneA, audioDeviceForAnswer);
dropCall(phoneB, audioDeviceForCall);
delay(2000);
report.report("Missed calls");
startCall(phoneB, audioDeviceForCall, phoneA);
delay(3000);
dropCall(phoneB, audioDeviceForCall);
delay(2000);
startCall(phoneB, audioDeviceForCall, phoneA);
delay(3000);
dropCall(phoneB, audioDeviceForCall);
delay(5000);
phoneA.pressKey(OneXKey.CALL_LOG, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "History", null);
delay(3000);
report.report("Clear call log");
delay(2000);
switch(phoneA.getModelType()) {
case MODEL_9601:
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay, 2);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.SOFT_KEY_3, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_2, keypadDelay);
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay);
break;
case MODEL_9641:
phoneA.pressKey(OneXKey.SOFT_KEY_0, keypadDelay, 2);
break;
}
checkFullImageWithoutDateTime(phoneA, "Call logs are cleared", null);
if(phoneA.getHistoryScreenLines().length == 1)
report.report("All call logs are cleared");
else
report.report("Call logs are not cleared after press Clear All", Reporter.FAIL);
delay(2000);
report.report("Check missed calls");
switch(phoneA.getModelType()) {
case MODEL_9601:
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_RIGHT, keypadDelay);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.CALL_LOG_MISSED, keypadDelay);
break;
}
checkFullImageWithoutDateTime(phoneA, "Missed calls", null);
if(phoneA.getHistoryScreenLines().length > 1)
report.report("Missed calls are not cleared", Reporter.FAIL);
else
report.report("Missed calls are cleared too");
delay(3000);
report.report("Check all call logs again");
switch(phoneA.getModelType()) {
case MODEL_9601:
case MODEL_9608:
case MODEL_9611:
phoneA.pressKey(OneXKey.NAVIGATION_LEFT, keypadDelay);
break;
case MODEL_9641:
phoneA.touch(OneXScreenObject.CALL_LOG_ALL, keypadDelay);
}
checkFullImageWithoutDateTime(phoneA, "All call logs after missed calls", null);
if(phoneA.getHistoryScreenLines().length > 1)
report.report("Call logs ae not cleared AGAIN", Reporter.FAIL);
else
report.report("All call logs are cleared");
delay(3000);
phoneA.pressKey(OneXKey.PHONE, keypadDelay);
checkFullImageWithoutDateTime(phoneA, "IdleAfterTest", null);
}
catch(Exception e) {
reportException(e);
}
}
Размещено на Allbest.ru
...Подобные документы
История возникновения тестирования программного обеспечения, основные цели и особенности его проведения. Виды и типы тестирования, уровни его автоматизации. Использование и исследование необходимых технологий. Полный цикл прогона всей системы мониторинга.
дипломная работа [1,7 M], добавлен 03.05.2018История развития и виды тестирования программного обеспечения. Инсталляционное, регрессионное, конфигурационное, интеграционное, локализационное, модульное тестирование. Методы сокращения трудоемкости модульного тестирования разрабатываемого приложения.
курсовая работа [309,5 K], добавлен 16.12.2015Неразрешимость проблемы тестирования программного обеспечения. Виды и уровни тестирования. Стратегии восходящего и нисходящего тестирования. Методы "белого" и "черного" ящика. Автоматизированное и ручное тестирование. Разработка через тестирование.
курсовая работа [112,2 K], добавлен 22.03.2015Тестирование как составляющая часть процесса отладки программного обеспечения, его роль для обеспечения качества продукта. Обнаружение ошибок в программах, выявление причин их возникновения. Подходы к формулированию критериев полноты тестирования.
курсовая работа [1,6 M], добавлен 20.12.2012Изучение различных видов тестирования программного обеспечения. Выявление в программной системе скрытых дефектов до того, как она будет сдана заказчику. Тестирование методом черного ящика. Требования, предъявляемые к процессу тестирования больших систем.
курсовая работа [3,0 M], добавлен 19.11.2009Комплексное функциональное и структурное тестирование программного продукта - граф-программа решения квадратного уравнения. Постановка задачи структурного тестирования маршрутов. Заключение о типе и причине ошибки, предложение по ее исправлению.
курсовая работа [2,8 M], добавлен 05.01.2013Тестирование и отладка программного обеспечения: понятие, принципы, этапы, цели и задачи. Тестирование методом сандвича как компромисс между восходящим и нисходящим подходами. Сущность метода "белого и черного ящика", отладки программного обеспечения.
курсовая работа [36,9 K], добавлен 21.07.2012Проектирование базы данных, информационной подсистемы PLC-Tester, модуля тестирования и web-приложения. Разработка логической структуры программного продукта и общие требования к техническому обеспечению. Запуск программы и описание тестовых прогонов.
дипломная работа [3,2 M], добавлен 30.06.2011Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Выбор инструментальной среды разработки программного обеспечения системы. Алгоритм создания теста и ввода его исходных данных. Анализ экономической эффективности применения программного обеспечения "Тестирования знаний обучающихся программированию".
дипломная работа [3,2 M], добавлен 11.09.2014Сравнительный анализ технологий тестирования. Разработка программного модуля "Интеллектуальная обучающая система для широкого перечня курсов". Обоснование необходимости и важности этапа отладки в процессе разработки данного программного обеспечения.
дипломная работа [101,2 K], добавлен 17.06.2011Схемы взаимодействия между заказчиком и разработчиком программного обеспечения. Качество программного обеспечения и определение основных критериев его оценка на современном этапе, особенности управления на стадиях жизненного цикла, анализ достаточности.
презентация [114,7 K], добавлен 14.08.2013Понятие и специфика автоматизированных систем. Описание методики разработки программы для автоматизации. Ее тестирование и отладка. Внедрение АС в работу предприятия. Расчет экономического эффекта от разработки и реализации программного продукта.
дипломная работа [1,4 M], добавлен 23.06.2015Общие сведения об исследуемой организации, направления ее хозяйственной деятельности, характеристика используемой вычислительной техники и программного обеспечения. Разработка пользовательского интерфейса, шаблонов, отладка и тестирование программы.
отчет по практике [159,3 K], добавлен 11.04.2016Разработка программного обеспечения, предназначенного для автоматизации деятельности туристической фирмы. Анализ и проектирование базы данных предметной области. Создание концептуальной, логической и физической моделей данных и программы их обработки.
курсовая работа [816,5 K], добавлен 05.02.2018Особенности аналитической и эмпирической моделей надежности программных средств. Проектирование алгоритма тестирования и разработка программы для определения надежности ПО моделями Шумана, Миллса, Липова, с использованием языка C# и VisualStudio 2013.
курсовая работа [811,5 K], добавлен 29.06.2014Изучение основных видов угроз программного обеспечения. Выявление наиболее эффективных средств и методов защиты программного обеспечения. Анализ их достоинств и недостатков. Описания особенностей лицензирования и патентования программного обеспечения.
курсовая работа [67,9 K], добавлен 29.05.2013Создание программного обеспечения в среде Visual Basic for Applications для проведения теста по работе полушарий мозга человека. Описание команд. Разработка интерфейса и тестирование программы. Листинг приветствия и задаваемых пользователю вопросов.
курсовая работа [387,1 K], добавлен 09.03.2014Процесс обучения ИТ-специалистов технологии MSF. Разработка информационной системы, моделирующей поведение "тестируемой программы" на стадии стабилизации для проведения практических занятий. Технология нефункционального тестирования, ее преподавание.
дипломная работа [2,3 M], добавлен 31.05.2016