A k6 script that sends several randomly chosen points from the pre-generated feature database with a variable delay in between. Prints the statistics when they are sent from the server.
JavaScript
import{ Client, Stream }from'k6/net/grpc';import{ sleep }from'k6';constCOORD_FACTOR=1e7;constGRPC_ADDR= __ENV.GRPC_ADDR||'127.0.0.1:10000';constGRPC_PROTO_PATH= __ENV.GRPC_PROTO_PATH||'../../grpc_server/route_guide.proto';const client =newClient();
client.load([],GRPC_PROTO_PATH);// a sample DB of pointsconstDB=[{location:{latitude:407838351,longitude:-746143763},name:'Patriots Path, Mendham, NJ 07945, USA',},{location:{latitude:408122808,longitude:-743999179},name:'101 New Jersey 10, Whippany, NJ 07981, USA',},{location:{latitude:413628156,longitude:-749015468},name:'U.S. 6, Shohola, PA 18458, USA',},{location:{latitude:419999544,longitude:-740371136},name:'5 Conners Road, Kingston, NY 12401, USA',},{location:{latitude:414008389,longitude:-743951297},name:'Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA',},{location:{latitude:419611318,longitude:-746524769},name:'287 Flugertown Road, Livingston Manor, NY 12758, USA',},{location:{latitude:406109563,longitude:-742186778},name:'4001 Tremley Point Road, Linden, NJ 07036, USA',},{location:{latitude:416802456,longitude:-742370183},name:'352 South Mountain Road, Wallkill, NY 12589, USA',},{location:{latitude:412950425,longitude:-741077389},name:'Bailey Turn Road, Harriman, NY 10926, USA',},{location:{latitude:412144655,longitude:-743949739},name:'193-199 Wawayanda Road, Hewitt, NJ 07421, USA',},];exportdefault()=>{if(__ITER ==0){
client.connect(GRPC_ADDR,{plaintext:true});}const stream =newStream(client,'main.RouteGuide/RecordRoute');
stream.on('data',(stats)=>{
console.log('Finished trip with', stats.pointCount,'points');
console.log('Passed', stats.featureCount,'features');
console.log('Travelled', stats.distance,'meters');
console.log('It took', stats.elapsedTime,'seconds');});
stream.on('error',(err)=>{
console.log('Stream Error: '+JSON.stringify(err));});
stream.on('end',()=>{
client.close();
console.log('All done');});// send 5 random itemsfor(let i =0; i <5; i++){const point =DB[Math.floor(Math.random()*DB.length)];pointSender(stream, point);}// close the client stream
stream.end();sleep(1);};constpointSender=(stream, point)=>{
console.log('Visiting point '+
point.name +' '+
point.location.latitude /COORD_FACTOR+', '+
point.location.longitude /COORD_FACTOR);// send the location to the server
stream.write(point.location);sleep(0.5);};
A k6 script that sends a rectangle message and results (features) are streamed back to the client.
JavaScript
import{ Client, Stream }from'k6/net/grpc';import{ sleep }from'k6';constCOORD_FACTOR=1e7;constGRPC_ADDR= __ENV.GRPC_ADDR||'127.0.0.1:10000';constGRPC_PROTO_PATH= __ENV.GRPC_PROTO_PATH||'../../grpc_server/route_guide.proto';const client =newClient();
client.load([],GRPC_PROTO_PATH);exportdefault()=>{
client.connect(GRPC_ADDR,{plaintext:true});const stream =newStream(client,'main.FeatureExplorer/ListFeatures',null);
stream.on('data',function(feature){
console.log('Found feature called "'+
feature.name +'" at '+
feature.location.latitude /COORD_FACTOR+', '+
feature.location.longitude /COORD_FACTOR);});
stream.on('end',function(){// The server has finished sending
client.close();
console.log('All done');});
stream.on('error',function(e){// An error has occurred and the stream has been closed.
console.log('Error: '+JSON.stringify(e));});// send a message to the server
stream.write({lo:{latitude:400000000,longitude:-750000000,},hi:{latitude:420000000,longitude:-730000000,},});sleep(0.5);};
The preceding examples use a demo server, which you can run with the following command (Golang should be installed) in
k6 repository’s root: