How to use Test method of proto_test Package

Best Rod code snippet using proto_test.Test

protobuf.go

Source:protobuf.go Github

copy

Full Screen

1package main2import (3 "bytes"4 gzip "compress/gzip"5 "encoding/base64"6 "encoding/json"7 "fmt"8 "github.com/golang/protobuf/proto"9 "github.com/incognitochain/go-incognito-sdk-v2/coin"10 "github.com/incognitochain/go-incognito-sdk-v2/common"11 "github.com/incognitochain/go-incognito-sdk-v2/crypto"12 "github.com/incognitochain/go-incognito-sdk-v2/metadata"13 "github.com/incognitochain/go-incognito-sdk-v2/privacy"14 "github.com/incognitochain/go-incognito-sdk-v2/privacy/v2/bulletproofs"15 "github.com/incognitochain/go-incognito-sdk-v2/transaction/tx_ver2"16 "github.com/thanhn-inc/data-serialization-benchmark/proto_test"17 "io/ioutil"18)19func ScalarToProtoBuf(sc *crypto.Scalar) *proto_test.PbScalar {20 if sc == nil {21 return nil22 }23 return &proto_test.PbScalar{Key: sc.ToBytesS()}24}25func ProtoBufToScalar(protoSc *proto_test.PbScalar) *crypto.Scalar {26 if protoSc == nil {27 return nil28 }29 return new(crypto.Scalar).FromBytesS(protoSc.Key)30}31func PointToProtoBuf(p *crypto.Point) *proto_test.PbPoint {32 if p == nil {33 return nil34 }35 return &proto_test.PbPoint{Key: p.ToBytesS()}36}37func ProtoBufToPoint(protoPoint *proto_test.PbPoint) *crypto.Point {38 if protoPoint == nil {39 return nil40 }41 res, _ := new(crypto.Point).FromBytesS(protoPoint.Key)42 return res43}44func CoinV2ToProtoBuf(c *coin.CoinV2) *proto_test.PbCoinV2 {45 res := new(proto_test.PbCoinV2)46 res.Version = int32(c.GetVersion())47 res.Info = c.GetInfo()48 res.PublicKey = PointToProtoBuf(c.GetPublicKey())49 res.Commitment = PointToProtoBuf(c.GetCommitment())50 res.KeyImage = PointToProtoBuf(c.GetKeyImage())51 res.SharedConcealRandom = ScalarToProtoBuf(c.GetSharedConcealRandom())52 res.SharedRandom = ScalarToProtoBuf(c.GetSharedRandom())53 if c.GetTxRandom() != nil {54 res.TxRandom = c.GetTxRandom().Bytes()55 }56 res.Mask = ScalarToProtoBuf(c.GetRandomness())57 res.Amount = ScalarToProtoBuf(c.GetAmount())58 res.AssetTag = PointToProtoBuf(c.GetAssetTag())59 return res60}61func InnerProofToProtoBuf(p *bulletproofs.InnerProductProof) *proto_test.PbInnerProductProof {62 res := new(proto_test.PbInnerProductProof)63 L := make([]*proto_test.PbPoint, 0)64 for _, lElem := range p.L() {65 L = append(L, PointToProtoBuf(lElem))66 }67 res.L = L68 R := make([]*proto_test.PbPoint, 0)69 for _, rElem := range p.R() {70 R = append(R, PointToProtoBuf(rElem))71 }72 res.R = R73 res.A = ScalarToProtoBuf(p.A())74 res.B = ScalarToProtoBuf(p.B())75 res.P = PointToProtoBuf(p.P())76 return res77}78func RangeProofToProtoBuf(p *bulletproofs.RangeProof) *proto_test.PbRangeProof {79 res := new(proto_test.PbRangeProof)80 res.CmsValues = make([]*proto_test.PbPoint, 0)81 for _, cmsValue := range p.GetCmsValues() {82 res.CmsValues = append(res.CmsValues, PointToProtoBuf(cmsValue))83 }84 res.A = PointToProtoBuf(p.A())85 res.S = PointToProtoBuf(p.S())86 res.T1 = PointToProtoBuf(p.T1())87 res.T2 = PointToProtoBuf(p.T2())88 res.TauX = ScalarToProtoBuf(p.TauX())89 res.THat = ScalarToProtoBuf(p.THat())90 res.Mu = ScalarToProtoBuf(p.Mu())91 res.InnerProof = InnerProofToProtoBuf(p.InnerProof())92 return res93}94func ProofV2ToProtoBuf(p *privacy.ProofV2) (*proto_test.PbProofV2, error) {95 res := new(proto_test.PbProofV2)96 res.Version = int32(p.Version)97 tmpRangeProof, ok := p.GetRangeProof().(*bulletproofs.RangeProof)98 if !ok {99 return nil, fmt.Errorf("not a valid bulletProofs")100 }101 res.RangeProof = RangeProofToProtoBuf(tmpRangeProof)102 res.InputCoins = make([]*proto_test.PbCoinV2, 0)103 for i, inCoin := range p.GetInputCoins() {104 inCoinV2, ok := inCoin.(*coin.CoinV2)105 if !ok {106 return nil, fmt.Errorf("input coin %v is not a CoinV2", i)107 }108 res.InputCoins = append(res.InputCoins, CoinV2ToProtoBuf(inCoinV2))109 }110 res.OutputCoins = make([]*proto_test.PbCoinV2, 0)111 for i, outCoin := range p.GetOutputCoins() {112 outCoinV2, ok := outCoin.(*coin.CoinV2)113 if !ok {114 return nil, fmt.Errorf("output coin %v is not a CoinV2", i)115 }116 res.OutputCoins = append(res.OutputCoins, CoinV2ToProtoBuf(outCoinV2))117 }118 tmpBytes := p.Bytes()119 protoBytes, _ := proto.Marshal(res)120 fmt.Printf("jsbLength: %v, protoLength: %v\n", len(tmpBytes), len(protoBytes))121 return res, nil122}123func MetadataToCompactBytes(md metadata.Metadata) ([]byte, error) {124 var err error125 switch md.GetType() {126 case metadata.PortalV4ShieldingRequestMeta:127 req := md.(*metadata.PortalShieldingRequest)128 res := new(proto_test.PbPortalShieldRequestMeta)129 res.Type = int32(metadata.PortalV4ShieldingRequestMeta)130 res.TokenID = req.TokenID131 res.Address = req.IncAddressStr132 res.Proof, err = base64.StdEncoding.DecodeString(req.ShieldingProof)133 if err != nil {134 return nil, err135 }136 return proto.Marshal(res)137 case metadata.PortalV4SubmitConfirmedTxMeta:138 req := md.(*metadata.PortalSubmitConfirmedTxRequest)139 res := new(proto_test.PbPortalSubmitConfirmedTxMeta)140 res.Type = int32(metadata.PortalV4SubmitConfirmedTxMeta)141 res.TokenID = req.TokenID142 res.BatchID = req.BatchID143 res.Proof, err = base64.StdEncoding.DecodeString(req.UnshieldProof)144 if err != nil {145 return nil, err146 }147 return proto.Marshal(res)148 case metadata.IssuingETHRequestMeta, metadata.IssuingBSCRequestMeta,149 metadata.IssuingPRVBEP20RequestMeta, metadata.IssuingPRVERC20RequestMeta:150 req := md.(*metadata.IssuingEVMRequest)151 res := new(proto_test.PbIssuingEVMRequest)152 res.Type = int32(req.Type)153 res.TokenID = req.IncTokenID.GetBytes()154 res.TxIndex = uint64(req.TxIndex)155 res.BlockHash = req.BlockHash.Bytes()156 proofs := make([][]byte, 0)157 for _, proofStr := range req.ProofStrs {158 proof, err := base64.StdEncoding.DecodeString(proofStr)159 if err != nil {160 return nil, err161 }162 proofs = append(proofs, proof)163 }164 res.Proofs = proofs165 return proto.Marshal(res)166 default:167 return json.Marshal(md)168 }169}170func CompactBytesToMetadata(data []byte) (md metadata.Metadata, err error) {171 if len(data) == 0 {172 return nil, nil173 }174 md, err = compactBytesToPortalV4ShieldRequest(data)175 if err == nil {176 return177 }178 md, err = compactBytesToPortalSubmitConfirmedRequest(data)179 if err == nil {180 return181 }182 md, err = compactBytesToIssuingEVMRequest(data)183 if err == nil {184 return185 }186 return metadata.ParseMetadata(data)187}188func TxToProtoBuf(tx *tx_ver2.Tx) (*proto_test.PbTxVer2, error) {189 if tx.GetType() == "cv" || tx.GetType() == "tcv" {190 return nil, fmt.Errorf("tx type %v not supported", tx.GetType())191 }192 res := new(proto_test.PbTxVer2)193 res.Version = int32(tx.Version)194 res.Type = tx.Type195 res.LockTime = tx.LockTime196 res.Fee = tx.Fee197 if tx.Info == nil {198 res.Info = nil199 } else if len(tx.Info) == 0 {200 res.Info = txInfoPlaceHolder201 } else {202 res.Info = tx.Info203 }204 res.SigPubKey = tx.SigPubKey205 res.Sig = tx.Sig206 res.LastByte = int32(tx.PubKeyLastByteSender)207 if tx.GetMetadata() != nil {208 var err error209 res.Metadata, err = MetadataToCompactBytes(tx.GetMetadata())210 if err != nil {211 return nil, err212 }213 }214 if tx.GetProof() != nil {215 //proofBytes := tx.Proof.Bytes()216 //var buf bytes.Buffer217 //zw := gzip.NewWriter(&buf)218 //_, err := zw.Write(proofBytes)219 //if err != nil {220 // return nil, err221 //}222 //223 //res.Proof = buf.Bytes()224 //_ = zw.Close()225 res.Proof = tx.GetProof().Bytes()226 }227 //proofV2, _ := tx.GetProof().(*privacy.ProofV2)228 //var err error229 //res.Proof, err = ProofV2ToProtoBuf(proofV2)230 //if err != nil {231 // return nil, err232 //}233 return res, nil234}235func ProtoBufToTx(protoTx *proto_test.PbTxVer2) (*tx_ver2.Tx, error) {236 res := new(tx_ver2.Tx)237 var err error238 if len(protoTx.Proof) != 0 {239 //zr, err := gzip.NewReader(bytes.NewReader(protoTx.Proof))240 //if err != nil {241 // return nil, err242 //}243 //proofBytes := make([]byte, defaultBytesSliceSize)244 //n, err := zr.Read(proofBytes)245 //if err != nil {246 // return nil, err247 //}248 //249 //proof := new(privacy.ProofV2)250 //err = proof.SetBytes(proofBytes[:n])251 //if err != nil {252 // return nil, err253 //}254 //res.Proof = proof255 //_ = zr.Close()256 proof := new(privacy.ProofV2)257 err = proof.SetBytes(protoTx.Proof)258 if err != nil {259 return nil, err260 }261 res.Proof = proof262 }263 res.Version = int8(protoTx.Version)264 res.Type = protoTx.Type265 res.LockTime = protoTx.LockTime266 res.Fee = protoTx.Fee267 if protoTx.Info == nil {268 res.Info = nil269 } else if bytes.Equal(protoTx.Info, txInfoPlaceHolder) {270 res.Info = []byte{}271 } else {272 res.Info = protoTx.Info273 }274 res.SigPubKey = protoTx.SigPubKey275 res.Sig = protoTx.Sig276 res.PubKeyLastByteSender = byte(protoTx.LastByte)277 res.Metadata, err = CompactBytesToMetadata(protoTx.Metadata)278 if err != nil {279 return nil, err280 }281 return res, nil282}283func TxToCompactBytes(tx *tx_ver2.Tx) ([]byte, error) {284 protoTx, err := TxToProtoBuf(tx)285 if err != nil {286 return nil, err287 }288 dataBytes, err := proto.Marshal(protoTx)289 if err != nil {290 return nil, err291 }292 //293 //return dataBytes, nil294 var buf bytes.Buffer295 zw := gzip.NewWriter(&buf)296 _, err = zw.Write(dataBytes)297 if err != nil {298 return nil, err299 }300 _ = zw.Close()301 res := buf.Bytes()302 return res, nil303}304func CompactBytesToTx(data []byte) (*tx_ver2.Tx, error) {305 zr, err := gzip.NewReader(bytes.NewReader(data))306 if err != nil {307 return nil, err308 }309 protoTxBytes, err := ioutil.ReadAll(zr)310 if err != nil {311 return nil, err312 }313 _ = zr.Close()314 protoTx := new(proto_test.PbTxVer2)315 err = proto.Unmarshal(protoTxBytes, protoTx)316 if err != nil {317 return nil, err318 }319 return ProtoBufToTx(protoTx)320}321func TokenDataV2ToProtoBuf(tokenData tx_ver2.TxTokenDataVersion2) *proto_test.PbTxTokenDataVersion2 {322 res := new(proto_test.PbTxTokenDataVersion2)323 res.ID = tokenData.PropertyID.GetBytes()324 res.Name = tokenData.PropertyName325 res.Symbol = tokenData.PropertySymbol326 res.SigPubKey = tokenData.SigPubKey327 res.Sig = tokenData.Sig328 res.Proof = tokenData.Proof.Bytes()329 res.Type = int32(tokenData.Type)330 res.Mintable = tokenData.Mintable331 return res332}333func ProtoBufToTokenDataV2(protoTokenData *proto_test.PbTxTokenDataVersion2) (*tx_ver2.TxTokenDataVersion2, error) {334 res := new(tx_ver2.TxTokenDataVersion2)335 tokenID := new(common.Hash)336 err := tokenID.SetBytes(protoTokenData.ID)337 if err != nil {338 return nil, err339 }340 res.PropertyID = *tokenID341 res.PropertyName = protoTokenData.Name342 res.PropertySymbol = protoTokenData.Symbol343 res.SigPubKey = protoTokenData.SigPubKey344 res.Sig = protoTokenData.Sig345 res.Type = int(protoTokenData.Type)346 res.Mintable = protoTokenData.Mintable347 if len(protoTokenData.Proof) != 0 {348 proof := new(privacy.ProofV2)349 err = proof.SetBytes(protoTokenData.Proof)350 if err != nil {351 return nil, err352 }353 res.Proof = proof354 }355 return res, nil356}357func TxTokenToProtoBuf(tx *tx_ver2.TxToken) (*proto_test.PbTxTokenVer2, error) {358 if tx.GetType() == "cv" || tx.GetType() == "tcv" {359 return nil, fmt.Errorf("tx type %v not supported", tx.GetType())360 }361 var err error362 res := new(proto_test.PbTxTokenVer2)363 res.Tx, err = TxToProtoBuf(tx.GetTxBase().(*tx_ver2.Tx))364 if err != nil {365 return nil, err366 }367 res.TokenData = TokenDataV2ToProtoBuf(tx.TokenData)368 return res, nil369}370func TxTokenToCompactBytes(tx *tx_ver2.TxToken) ([]byte, error) {371 protoTx, err := TxTokenToProtoBuf(tx)372 if err != nil {373 return nil, err374 }375 dataBytes, err := proto.Marshal(protoTx)376 if err != nil {377 return nil, err378 }379 var buf bytes.Buffer380 zw := gzip.NewWriter(&buf)381 _, err = zw.Write(dataBytes)382 if err != nil {383 return nil, err384 }385 _ = zw.Close()386 res := buf.Bytes()387 return res, nil388}389func ProtoBufToTxToken(protoTxToken *proto_test.PbTxTokenVer2) (*tx_ver2.TxToken, error) {390 res := new(tx_ver2.TxToken)391 tmpTx, err := ProtoBufToTx(protoTxToken.Tx)392 if err != nil {393 return nil, err394 }395 res.Tx = *tmpTx396 tmpTokenData, err := ProtoBufToTokenDataV2(protoTxToken.TokenData)397 if err != nil {398 return nil, err399 }400 res.TokenData = *tmpTokenData401 return res, nil402}...

Full Screen

Full Screen

protolist_test.go

Source:protolist_test.go Github

copy

Full Screen

...5 "os"6 "strings"7 "testing"8)9func TestCamelCase(t *testing.T) {10 var m = map[string]string{11 "lua_out": "LuaOut",12 "query_hirable_hero": "QueryHirableHero",13 }14 for k, v := range m {15 v1 := camelCase(k)16 if v != v1 {17 t.Fatalf("camel case %s failed: %s", k, v1)18 }19 }20}21func TestSplitData(t *testing.T) {22 var lines = []string{23 "test {",24 "service1 = 1",25 "} test2 {} test3 {",26 "service2 = 2",27 "}\n",28 }29 data := strings.Join(lines, "# comment 1\r\n # comment 2 \r\n")30 result := splitData(data)31 if len(lines) != len(result) {32 t.Errorf("split data error, lines change:%d -> %d", len(lines), len(result))33 }34 for i, line := range result {35 if line != strings.TrimSpace(lines[i]) {36 t.Errorf("split data error, line:%d, %s -> %s", i, lines[i], line)37 }38 }39 modules := splitModules(result)40 n := strings.Count(data, "}")41 m := 042 for _, line := range modules {43 if line == "}" {44 m += 145 }46 t.Logf("%v", line)47 }48 if n != m {49 t.Errorf("split modules failed:%d -> %d", n, m)50 }51}52type Case struct {53 lines []string54 module Module55}56var case1 = Case{57 lines: []string{58 "test {",59 "service1 = 1",60 "service2:input1 = 2",61 "service3:input1[] = 3",62 "service4:input1[output1]=4",63 "service5:[ output1 ]=5",64 "service6:[]=6",65 "service7:.proto.test2.Service7 = 7",66 "service8:.proto.test2.Service7 [.proto.test2.Service8]= 8",67 "}",68 },69 module: Module{70 Name: "test",71 Services: []Service{72 {1, "service1", "proto_test.Service1", "proto_test.Service1_Response"},73 {2, "service2", "proto_test.Input1", "proto_test.Input1_Response"},74 {3, "service3", "proto_test.Input1", ""},75 {4, "service4", "proto_test.Input1", "proto_test.Output1"},76 {5, "service5", "proto_test.Service5", "proto_test.Output1"},77 {6, "service6", "proto_test.Service6", ""},78 {7, "service7", "proto_test2.Service7", "proto_test2.Service7_Response"},79 {8, "service8", "proto_test2.Service7", "proto_test2.Service8"},80 },81 },82}83var case2 = Case{84 lines: []string{85 "test1 {",86 "service11 = 11",87 "service12:input1 = 12",88 "service13:input1[] = 13",89 "service14:input1[output1]=14",90 "service15:[ output1 ]=15",91 "service16:[]=16",92 "}",93 },94 module: Module{95 Name: "test1",96 Services: []Service{97 {11, "service11", "proto_test1.Service11", "proto_test1.Service11_Response"},98 {12, "service12", "proto_test1.Input1", "proto_test1.Input1_Response"},99 {13, "service13", "proto_test1.Input1", ""},100 {14, "service14", "proto_test1.Input1", "proto_test1.Output1"},101 {15, "service15", "proto_test1.Service15", "proto_test1.Output1"},102 {16, "service16", "proto_test1.Service16", ""},103 },104 },105}106var cases = []Case{case1, case2}107func checkService(s1, s2 Service) bool {108 if s1.Id != s2.Id || s1.Name != s2.Name || s1.Input != s2.Input || s1.Output != s2.Output {109 fmt.Printf("service:%+v -> %+v\n", s1, s2)110 return false111 }112 return true113}114func checkModule(m1, m2 Module) bool {115 if m1.Name != m2.Name {116 return false117 }118 if len(m1.Services) != len(m2.Services) {119 return false120 }121 for i := 0; i < len(m1.Services); i++ {122 if !checkService(m1.Services[i], m2.Services[i]) {123 return false124 }125 }126 return true127}128func TestParseModule(t *testing.T) {129 for _, c := range cases {130 lines := c.lines131 module := c.module132 data := strings.Join(lines, "# test \r\n")133 m, err := ParseData(data)134 if err != nil {135 t.Fatal(err)136 }137 // t.Errorf("%+v", m)138 if !checkModule(m[0], module) {139 t.Fatalf("parse module failed, %+v ------------> %+v", module, m)140 }141 }142}143func TestParseFile(t *testing.T) {144 tmpfile, err := ioutil.TempFile(os.TempDir(), "proto")145 if err != nil {146 t.Fatal(err)147 }148 var all []string149 for _, c := range cases {150 all = append(all, strings.Join(c.lines, "# test\n"))151 }152 data := strings.Join(all, "\n")153 if _, err := tmpfile.Write([]byte(data)); err != nil {154 t.Fatal(err)155 }156 filePath := tmpfile.Name()157 tmpfile.Close()...

Full Screen

Full Screen

main.go

Source:main.go Github

copy

Full Screen

1package main2import (3 "fmt"4 "example.com/m/v2/github.com/GrayFlash/proto_test"5 "google.golang.org/protobuf/types/known/anypb"6 // "github.com/GrayFlash/proto_test"7)8func main() {9 fmt.Println("Hello world!")10 db := &proto_test.Dashboard{}11 any, err := anypb.New(db)12 if err != nil {13 fmt.Println(err)14 }15 data := proto_test.Asset{Data: any}16 fmt.Println(data.Data)17 one := proto_test.AssetOne{Data: &proto_test.AssetOne_Dashboard{Dashboard: &proto_test.Dashboard{}}}18 fmt.Println(one.Data)19}...

Full Screen

Full Screen

Test

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 test := proto_test.Test{4 Label: proto_test.Test_Label(1),5 Type: proto_test.Test_Type(2),6 Optionalgroup: &proto_test.Test_OptionalGroup{7 RequiredField: proto.String("xx"),8 },9 }10 fmt.Println(test)11}12import (13func main() {14 test := proto_test.Test{15 Label: proto_test.Test_Label(1),16 Type: proto_test.Test_Type(2),17 Optionalgroup: &proto_test.Test_OptionalGroup{18 RequiredField: proto.String("xx"),19 },20 }21 data, err := proto.Marshal(&test)22 if err != nil {23 fmt.Println("marshaling error: ", err)24 }25 newTest := &proto_test.Test{}26 err = proto.Unmarshal(data, newTest)27 if err != nil {28 fmt.Println("unmarshaling error: ", err)29 }30 fmt.Println(newTest)31}32import (33func main() {34 test := proto_test.Test{35 Label: proto_test.Test_Label(1),36 Type: proto_test.Test_Type(2),37 Optionalgroup: &proto_test.Test_OptionalGroup{38 RequiredField: proto.String("xx"),39 },40 }41 data, err := proto.Marshal(&test)42 if err != nil {43 fmt.Println("marshaling error: ", err)44 }45 newTest := &proto_test.Test{}46 err = proto.UnmarshalMerge(data, newTest)47 if err != nil {48 fmt.Println("unmarshaling error: ", err)49 }50 fmt.Println(newTest)51}52import (

Full Screen

Full Screen

Test

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Hello World!")4 p.Test = proto.String("Hello World")5 fmt.Println(p.GetTest())6}7Your name to display (optional):

Full Screen

Full Screen

Test

Using AI Code Generation

copy

Full Screen

1import "proto_test"2func main() {3 var t = proto_test.Test{Id: 1, Name: "Test"}4 var t2 = proto_test.Test{}5 t3 := proto_test.Test{}6 var t4 = proto_test.Test{}7 var t5 = proto_test.Test{}8 var t6 = proto_test.Test{}9 var t7 = proto_test.Test{}10 var t8 = proto_test.Test{}11 var t9 = proto_test.Test{}12 var t10 = proto_test.Test{}13 var t11 = proto_test.Test{}14 var t12 = proto_test.Test{}15 var t13 = proto_test.Test{}16 var t14 = proto_test.Test{}17 var t15 = proto_test.Test{}18 var t16 = proto_test.Test{}19 var t17 = proto_test.Test{}20 var t18 = proto_test.Test{}21 var t19 = proto_test.Test{}

Full Screen

Full Screen

Test

Using AI Code Generation

copy

Full Screen

1import ("fmt"2func main() {3 p := proto_test.Proto_test{}4 p.Test()5 fmt.Println("Hello world!")6}7import ("fmt"8func main() {9 p := proto_test.Proto_test{}10 p.Test()11 fmt.Println("Hello world!")12}13import ("fmt"14func main() {15 p := proto_test.Proto_test{}16 p.Test()17 fmt.Println("Hello world!")18}19import ("fmt"20func main() {21 p := proto_test.Proto_test{}22 p.Test()23 fmt.Println("Hello world!")24}25import ("fmt"26func main() {27 p := proto_test.Proto_test{}28 p.Test()29 fmt.Println("Hello world!")30}31import ("fmt"32func main() {33 p := proto_test.Proto_test{}34 p.Test()35 fmt.Println("Hello world!")36}37import ("fmt"38func main() {39 p := proto_test.Proto_test{}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Rod automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Most used method in

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful