添加地址、商品购买

This commit is contained in:
licy@guangda.work 2023-04-13 17:07:06 +08:00 committed by Edward Yang
parent 0085f2dd2d
commit 7955534530
20 changed files with 297 additions and 205 deletions

3
phpinfo.php Normal file
View File

@ -0,0 +1,3 @@
<?php
phpinfo();
?>

View File

@ -10,7 +10,8 @@
stopOnFailure="false">
<testsuites>
<testsuite name="Browser Test Suite">
<directory suffix="Test.php">./tests/Browser</directory>
<directory suffix="Test.php">tests\Browser\dusktest\page\front\RegisterTest.php</directory>
</testsuite>
</testsuites>
</phpunit>

View File

@ -11,6 +11,7 @@
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>

3
public/phpinfo.php Normal file
View File

@ -0,0 +1,3 @@
<?php
phpinfo();
?>

View File

@ -0,0 +1,19 @@
<?php
use Tests\DuskTestCase;
use PHPUnit\Framework\TestSuite;
require_once __DIR__.'/../page/front/LoginTest.php';
require_once __DIR__.'/../page/front/RegisterTest.php';
class DuskTestSuite extends DuskTestCase
{
public static function suite()
{
$suite = new TestSuite('Dusk Tests');
$suite->addTestFile(__DIR__.'/../page/front/LoginTest.php');
$suite->addTestFile(__DIR__.'/../page/front/RegisterTest.php');
return $suite;
}
}

View File

@ -0,0 +1,31 @@
<?php
//require_once __DIR__.'/../../../../vendor/autoload.php';
//require_once __DIR__.'/DuskTestSuite.php';
//require_once __DIR__.'/../page/front/RegisterTest.php';
use PHPUnit\Framework\TestResult;
use Tests\DuskTestCase;
use PHPUnit\Framework\TestSuite;
use PHPUnit\TextUI\ResultPrinter;
use PHPUnit\TextUI\DefaultResultPrinter;
$suite = new TestSuite();
// 向测试套件中添加测试用例
//1.先注册一个账户
$suite->addTestFile('E:\phpstudy_pro\WWW\autotest.test\beikeshop\tests\Browser\dusktest\page\front\RegisterFirst.php');
//注册
$suite->addTestFile('E:\phpstudy_pro\WWW\autotest.test\beikeshop\tests\Browser\dusktest\page\front\RegisterTest.php');
//增加地址
$suite->addTestFile('E:\phpstudy_pro\WWW\autotest.test\beikeshop\tests\Browser\dusktest\page\front\AddressTest.php');
$suite->addTestFile('E:\phpstudy_pro\WWW\autotest.test\beikeshop\tests\Browser\dusktest\page\front\LoginTest.php');
$suite->addTestFile('E:\phpstudy_pro\WWW\autotest.test\beikeshop\tests\Browser\dusktest\page\front\OrderTest.php');
// 运行测试套件
$result = $suite->run();
// 输出测试结果
$printer = new DefaultResultPrinter();
// 输出测试结果
$printer->printResult($result);

View File

@ -1,48 +0,0 @@
<?php
namespace Tests\Browser;
namespace App\Http\Controllers;
namespace App\Http\Controllers\login;
namespace App\Http\Controllers\TestCase;
use App\Http\Controllers\LoginGrounp;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Http\Controllers\By;
use PHPUnit\Framework\TestCase;
require_once 'vendor/autoload.php';
require_once(dirname(__FILE__) . '/../page/front/loginGrounp.php');
class Run_Login_Case extends DuskTestCase
{
/**
* A basic browser test example.
*/
public function runScenarios(array $scenarios)
{
foreach ($scenarios as $scenario) {
$this->$scenario();
}
}
public function test_login_run()
{
$Loginful = new LoginGrounp();
$Loginful->openurl();
// $this->runScenarios([
// 'openurl',
// 'ture_email',
// 'ture_password',
// 'click_login_btn',
// 'ture_assert',
// ]);
}
}

View File

@ -0,0 +1,9 @@
<?php
const add_address = [
"add_name"=>"test",//add_name
"add_phone"=>"v11012010086",//选择国家
"add_code"=>"643203",//add_code
"add_address1"=>"test1",//add_address1
"add_address2"=>"test2",//add_address2
];

View File

@ -0,0 +1,23 @@
<?php
const account = [
"login_url" =>"/account",
"go_index"=>"Home",//beikeshop图标
];
const address = [
"login_url" =>"/account/addresses",
"add_btn"=>"Add New Address",
"go_address"=>"Addresses",//beikeshop图标
"add_name"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(1) > div > div > input",//add_name
"add_phone"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(2) > div > div > input",//add_phone
"add_country"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(3) > div > div > div:nth-child(1) > div > div > div > div.el-input.el-input--suffix > span > span",//选择国家
"add_address"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(3) > div > div > div:nth-child(3) > div > div > div.el-input > input",
"add_province"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(3) > div > div > div:nth-child(2) > div > div > div > div.el-input.el-input--suffix > span > span",
"add_code"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(4) > div > div > input",//add_code
"add_address1"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(5) > div > div > input",//add_address1
"add_address2"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(6) > div > div > input",//add_address2
"default"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(7) > div > div > span",//default
"save"=>"#address-app > div:nth-child(2) > div > div > div.el-dialog__body > form > div:nth-child(8) > div > button.el-button.el-button--primary",//save
"assert"=>"Default Address",
//addresses
];

View File

@ -0,0 +1,7 @@
<?php
const checkout = [
'submit' => 'Submit Order',
'assert' => 'Congratulations, the order was successfully generated!',
];

View File

@ -0,0 +1,9 @@
<?php
const index = [
"login_url" => "/",
"product_img" => "#tab-product-0 > div > div:nth-child(1) > div > div.image > a",//购买商品图标
"buy_btn" => "#product-top > div:nth-child(2) > div > div.quantity-btns > button.btn.btn-dark.ms-3.fw-bold",//购买按钮
"address_btn" => "#checkout-address-app > div.checkout-black > div.addresses-wrap > div > div > div > button", //添加地址
"login_text" => "Home",
];

View File

@ -0,0 +1,17 @@
<?php
const order = [
"login_url" =>"/login",
"product"=> "#tab-product-0 > div > div:nth-child(1) > div > div.image > a > div > img",//购买商品
"buy_btn"=> "#product-top > div:nth-child(2) > div > div.quantity-btns > button.btn.btn-dark.ms-3.fw-bold",//购买按钮
"address_btn"=>"#checkout-address-app > div.checkout-black > div.addresses-wrap > div > div > div > button", //添加地址
"login_text"=> "Home",
];
const register = [
"register_email" => "#page-login > div.login-wrap > div:nth-child(3) > div.card-body.px-md-2 > form > div:nth-child(1) > div > div > input",
"register_pwd"=> "#page-login > div.login-wrap > div:nth-child(3) > div.card-body.px-md-2 > form > div:nth-child(2) > div > div > input",
"register_re_pwd"=> "#page-login > div.login-wrap > div:nth-child(3) > div.card-body.px-md-2 > form > div:nth-child(3) > div > div > input",
"register_btn"=> "Register",
"register_text"=> "Home",
];

View File

@ -0,0 +1,10 @@
<?php
const product = [
"login_url" =>"/products/1",
"product_1"=> "Buy Now",//购买商品
"buy_btn"=> "#product-top > div:nth-child(2) > div > div.quantity-btns > button.btn.btn-dark.ms-3.fw-bold",//购买按钮
"address_btn"=>"#checkout-address-app > div.checkout-black > div.addresses-wrap > div > div > div > button", //添加地址
"login_text"=> "Home",
];

View File

@ -2,13 +2,13 @@
const true_register = [
'email' => 'testtest@163.com',
'email' => 'test2@163.com',
'password' => '123456',
'assert' => 'Sign Out',
];
const false_register = [
'false_email' => 'test@163.com', //已注册的email
'exist_email' => 'test@163.com', //已注册的email
'illegal_email' => 'test',
'false_password' => '1234567',
'false_assert' => 'User login and registration',

View File

@ -0,0 +1,63 @@
<?php
namespace Tests\Browser;
namespace App\Http\Controllers;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Http\Controllers\By;
require_once(dirname(__FILE__) . '/../../data/login.php');
require_once(dirname(__FILE__) . '/../../data/login_page.php');
require_once(dirname(__FILE__) . '/../../data/account_page.php');
require_once(dirname(__FILE__) . '/../../data/account.php');
//已注册客户且有地址,直接购买商品
class AddressTest extends DuskTestCase
{
public function testAddress()
{
$this->browse(function (Browser $browser) {
$browser->visit(login['login_url'])
//1.用户登录
->type(login['login_email'], true_login['email'])
->type(login['login_pwd'], true_login['password'])
->press(login['login_btn'])
->pause(2000)
//当前网址断言
->assertUrlIs('http://autotest.test/account', $browser->driver->getCurrentURL())
//2.点击address
->clickLink(address['go_address'])
//3.点击添加地址
->press(address['add_btn'])
->pause(3000)
//3.1 name
->type(address['add_name'], add_address['add_name'])
//3.2 phone
->type(address['add_phone'], add_address['add_phone'])
//3.3 address
->type(address['add_address'], add_address['add_name'])
//3.4 code
->type(address['add_code'], add_address['add_code'])
//3.5 address1
->type(address['add_address1'], add_address['add_address2'])
//3.6 address2
->type(address['add_address2'], add_address['add_address2'])
//3.7 defaule
->press((address['default']))
//3.8 save
->press((address['save']))
->pause(3000)
->assertSee(address['assert']);
;
//3.向下滑动页面直到找到元素
});
}
}

View File

@ -1,148 +0,0 @@
<?php
namespace Tests\Browser;
namespace App\Http\Controllers;
namespace App\Http\Controllers\LoginGrounp;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Http\Controllers\By;
require_once(dirname(__FILE__) . '/../../data/login.php');
require_once(dirname(__FILE__) . '/../../data/login_page.php');
class LoginGrounp extends DuskTestCase
{
/**
* A basic browser test example.
*/
public function runScenarios(array $scenarios)
{
foreach ($scenarios as $scenario) {
$this->$scenario();
}
}
#1.打开浏览器
public function openurl()
{
$this->browse(function (Browser $browser) {
$browser->visit(login['login_url'])
->pause(2000);
});
}
#输入正确email
public function true_email()
{
$this->browse(function (Browser $browser) {
$browser->type(login['login_email'], true_login['email']);
});
}
#输入错误的email
public function false_email()
{
$this->browse(function (Browser $browser) {
$browser->type(login['login_email'], false_login['false_email']);
});
}
#输入非法的email
public function illegal_email()
{
$this->browse(function (Browser $browser) {
$browser->type(login['login_email'], false_login['illegal_email']);
});
}
#输入正确的password
public function true_password()
{
$this->browse(function (Browser $browser) {
$browser->type(login['login_pwd'], true_login['password']);
});
}
#输入错误的password
public function false_password()
{
$this->browse(function (Browser $browser) {
$browser->type(login['login_pwd'], false_login['false_password']);
});
}
#点击login
public function click_login_btn()
{
$this->browse(function (Browser $browser) {
$browser->press(login['login_btn']);
});
}
#登录正确断言
public function true_assert()
{
$this->browse(function (Browser $browser) {
$browser->assertSee(true_login['assert'])
->pause(3000)
->quit();
});
}
#登录错误断言
public function false_assert()
{
$this->browse(function (Browser $browser) {
$browser->assertSee(false_login['false_assert'])
->pause(3000)
->quit();
});
}
#组合测试
#场景1---密码账号正确
public function test_login_ful()
{
$this->runScenarios([
'openurl',
'true_email',
'true_password',
'click_login_btn'=> function (Browser $browser) {
$browser->pause(1000) // 等待页面跳转
->assertPathIs('/account');
},
'true_assert' => function (Browser $browser) {
$browser->assertSee('欢迎回来!');
},
]);
}
#场景2---密码错误、账号正确
public function test_pwd_error()
{
$this->runScenarios([
'openurl',
'true_email',
'false_password',
'click_login_btn',
'false_assert',
]);
}
#场景3---密码正确、账号错误
public function test_email_error()
{
$this->runScenarios([
'openurl',
'false_email',
'true_password',
'click_login_btn',
'false_assert',
]);
}
#场景4---密码正确、账号非法
public function test_email_illegal()
{
$this->runScenarios([
'openurl',
'false_email',
'illegal_email',
'click_login_btn',
'false_assert',
]);
}
}

View File

@ -48,7 +48,7 @@ class LoginTest extends DuskTestCase
$this->browse(function (Browser $browser)
{
$browser->visit(login['login_url'])
->type(login['login_email'], false_login['false_email'])
->type(login['login_email'], true_login['email'])
->type(login['login_pwd'], false_login['false_password'])
->press(login['login_btn'])
->assertSee(false_login['false_assert']);
@ -60,7 +60,7 @@ class LoginTest extends DuskTestCase
$this->browse(function (Browser $browser)
{
$browser->visit(login['login_url'])
->type(login['login_email'], false_login['false_email'])
->type(login['login_email'], true_login['email'])
->press(login['login_btn'])
->assertSee(false_login['false_assert']);
});
@ -71,7 +71,7 @@ class LoginTest extends DuskTestCase
$this->browse(function (Browser $browser)
{
$browser->visit(login['login_url'])
->type(login['login_pwd'], false_login['false_password'])
->type(login['login_pwd'], true_login['email'])
->press(login['login_btn'])
->assertSee(false_login['false_assert']);
});

View File

@ -0,0 +1,54 @@
<?php
namespace Tests\Browser;
namespace App\Http\Controllers;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Http\Controllers\By;
require_once(dirname(__FILE__) . '/../../data/login.php');
require_once(dirname(__FILE__) . '/../../data/login_page.php');
require_once(dirname(__FILE__) . '/../../data/account_page.php');
require_once(dirname(__FILE__) . '/../../data/product_1.php');
require_once(dirname(__FILE__) . '/../../data/index_page.php');
require_once(dirname(__FILE__) . '/../../data/checkout_page.php');
//已注册客户且有地址,直接购买商品
class OrderTest extends DuskTestCase
{
public function testOrder()
{
$this->browse(function (Browser $browser)
{
$browser->visit(login['login_url'])
//1.用户登录
->type(login['login_email'], true_login['email'])
->type(login['login_pwd'], true_login['password'])
->press(login['login_btn'])
->pause(2000)
//当前网址断言
->assertUrlIs('http://autotest.test/account', $browser->driver->getCurrentURL())
//打印查看当前网址
// $html = $browser->driver->getCurrentURL();
// print_r($html);
// ->driver->getCurrentURL()
//2.点击home跳转到首页
->clickLink(account['go_index'])
//3.向下滑动页面直到找到元素
->scrollIntoView(index['product_img'])
// ->mouseover(index['product_img'])
->pause(2000)
//点击要购买的商品
->press(index['product_img'])
//4.点击购买按钮
->press(product['product_1'])
->pause(5000)
//5.点击确认按钮
->press(checkout['submit'])
->pause(5000)
//6.断言
->assertSee(checkout['assert']);
});
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace Tests\Browser;
namespace App\Http\Controllers;
namespace App\Http\Controllers\LoginGrounp;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
use App\Http\Controllers\By;
require_once(dirname(__FILE__) . '/../../data/login.php');
require_once(dirname(__FILE__) . '/../../data/login_page.php');
class RegisterFirst extends DuskTestCase
{
/**
* A basic browser test example.
*/
#1.先单独注册一个账号
public function testLoginFirst()
{
$this->browse(function (Browser $browser) {
$browser->visit(login['login_url'])
->type(register['register_email'], false_register['exist_email'])
->type(register['register_pwd'], true_register['password'])
->type(register['register_re_pwd'], true_register['password'])
->press(register['register_btn'])
->pause(3000)
->assertSee(true_register['assert']);
});
}
}

View File

@ -4,7 +4,7 @@
namespace Tests\Browser;
namespace App\Http\Controllers;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
@ -13,7 +13,7 @@ require_once(dirname(__FILE__) . '/../../data/login_page.php');
class RegisterTest extends DuskTestCase
{
use RefreshDatabase;
/**
* A basic browser test example.
*/
@ -23,7 +23,7 @@ class RegisterTest extends DuskTestCase
{
$this->browse(function (Browser $browser) {
$browser->visit(login['login_url'])
->type(register['register_email'], false_register['false_email'])
->type(register['register_email'], false_register['exist_email'])
->type(register['register_pwd'], true_register['password'])
->type(register['register_re_pwd'], true_register['password'])
->press(register['register_btn'])
@ -102,6 +102,7 @@ class RegisterTest extends DuskTestCase
->type(register['register_pwd'], true_register['password'])
->type(register['register_re_pwd'], true_register['password'])
->press(register['register_btn'])
->pause(3000)
->assertSee(true_register['assert']);
});
}